Tag: wpf

WPF运行时区域设置更改,重新评估ValueConverters UI

在大型WPF应用程序中,我们可以在运行时更改语言。 我们使用WPF Localize Extension和resx文件进行本地化,除了UI中使用的转换器外,它工作得很好。 如果在绑定中ValueConverter是特定于文化的,则不会在语言更改时更新生成的文本。 如何让WPF在应用程序范围内更新所有转换后的绑定? 编辑:目前我们已经通过制作ValueConverters MultiValueConverters并将区域设置添加为额外值进行了实验。 这样,值源值会更改,并且结果会更新。 但这很麻烦而且很难看。 相关: 绑定中的运行时文化更改和IValueConverter (我没有手动为每个字段引发propertychanged的选项)

在wpf中实时更新进度条

我在进度条实时显示更新时遇到了一些麻烦。 这是我现在的代码 for (int i = 0; i < 100; i++) { progressbar1.Value = i; Thread.Sleep(100); } 但由于某种原因,当函数运行时进度条显示为空,然后在函数完成运行之前没有任何内容。 有人可以向我解释如何做到这一点? 我是C#/ WPF的新手,所以我不能100%确定如何在不同的线程上实现Dispatcher(如其他一些post所示)来解决这个问题。 为了澄清,我的程序有一个按钮,按下时,从文本框中获取值,并使用API​​检索信息,并根据它创建标签。 我希望在每行数据处理完毕后更新进度条。 这就是我现在所拥有的: private async void search(object sender, RoutedEventArgs e) { var progress = new Progress(value => progressbar1.Value = value); await Task.Run(() => { this.Dispatcher.Invoke((Action)(() => { some pre-processing before the actual for loop […]

绑定XAML中Itemscontrol之外的Property

我试图绑定一个在Itemscontrol之外的Property。 然而,这似乎不起作用。 似乎在ItemsControl中,DataTemplate指的是集合内部而不是它之外的内容。 我已尝试使用RelativeResource并为ViewModel引用了AncestorType。 代码(VM): public class Test { public string GetThis {get{return “123”;} set{}} public List IterateProperty {get; set;} } XAML(查看):

带参数的Dispatch.Invoke(new Action …)

以前我有过 Dispatcher.Invoke(new Action(() => colorManager.Update())); 从另一个线程更新显示到WPF。 由于设计,我不得不改变程序,我必须将ColorImageFrame参数传递给我的ColorStreamManager.Update()方法。 点击此链接后,我将调度程序修改为: Dispatcher.Invoke(new Action((p,v) => p.Update(v))); 它编译得很好但根本不会运行。 VS2010说“参数计数不匹配”。 在我的ColorStreamManager.Update()方法中,我有RaisePropertyChanged(() => Bitmap) ; 有人可以指出我哪里出错了吗? ColorStreamManager.Update()方法的签名如下: public void Update(ColorImageFrame frame);

合并ObservableCollection

我有两个ObservableCollections,我需要在一个ListView控件中一起显示它们。 为此,我创建了MergedCollection,它将这两个集合显示为一个ObservableCollection。 这样我就可以将ListView.ItemsSource设置为我的合并集合,并列出两个集合。 添加工作正常,但当我尝试删除项目时,显示未处理的exception: An unhandled exception of type ‘System.InvalidOperationException’ occurred in PresentationFramework.dll Additional information: Added item does not appear at given index ‘2’. MergedCollection的代码如下: public class MergedCollection : IEnumerable, INotifyCollectionChanged { ObservableCollection nodes; ObservableCollection connections; public MergedCollection(ObservableCollection nodes, ObservableCollection connections) { this.nodes = nodes; this.connections = connections; this.nodes.CollectionChanged += new NotifyCollectionChangedEventHandler(NetworkNodes_CollectionChanged); this.connections.CollectionChanged += new […]

如何使WPF数据绑定重构安全?

所以我正在完成我的第一个WPF项目,我喜欢到目前为止看到的内容。 学习曲线比我预期的要多,但WPF非常酷。 但是,我正在努力解决数据绑定概念。 我遇到的一个具体问题是如何使我的数据绑定声明重构安全? 考虑这个例子。 public class MyDataObject { public string FooProperty { get; set; } } void Bind() { var gridView = myListView.View as GridView; gridView.Columns.Clear(); gridView.Columns.Add( new GridViewColumn() { Header = “FooHeader”, DisplayMember = new Binding(“FooProperty”) } ); List source = GetData(); myListView.ItemsSource = source; } 那么如果我将数据对象上的FooProperty重命名为其他内容呢? 数据绑定将无效,我不会收到编译错误,因为绑定是通过文本声明的。 有没有办法使绑定更安全一点?

从C#代码动态切换WPF网格列的可见性

我的问题是:我无法找到如何切换WPF网格列的可见性。 假设遵循XAML标记: Aferwards网格中充满了一些控件等。现在我想从C#代码中动态隐藏一个列。 我已经尝试通过将列的定义宽度设置为零来实现此目的,例如Column1.Width = 0 。 这有效,但我真的不喜欢这个解决方案 – 真的没有更好的方法吗? 我正在寻找类似myGrid.Columns[0].Visibility = COLLAPSED东西myGrid.Columns[0].Visibility = COLLAPSED或Column1.Visibility = HIDDEN 。 我找不到那样的东西 – 任何想法?

如何从WPF中的ComboBox获取文本值?

这可能是C#101所涵盖的内容,但我无法在谷歌或堆栈溢出的任何地方找到这个问题的易于理解的答案。 有没有更好的方法从combobox中返回文本值而不使用我想出的这种糟糕的工作? private void test_site_SelectionChanged(object sender, SelectionChangedEventArgs e) { string cmbvalue = “”; cmbvalue = this.test_site.SelectedValue.ToString(); string[] cmbvalues = cmbvalue.Split(new char[] { ‘ ‘ }); MessageBox.Show(cmbvalues[1]); } 请不要强硬我,我现在真的只是拿起c#和OOP。

Canvas.GetTop()返回NaN

我有一个带有一些UIElements的Canvas。 通过动画顶部和左侧属性将我们在canvas上移动后,偶尔会调用Canvas.GetTop,导致NaN。 我没有正确地“关闭”动画吗? 这是我如何做的举动 private void InternalMove(double durationMS, FrameworkElement fElement, Point point, EventHandler callback) { _moveElement = fElement; _destination = point; Duration duration = new Duration(TimeSpan.FromMilliseconds(durationMS)); DoubleAnimation moveLeftAnimation = new DoubleAnimation(Canvas.GetLeft(fElement), point.X, duration, FillBehavior.Stop); Storyboard.SetTargetProperty(moveLeftAnimation, new PropertyPath(“(Canvas.Left)”)); DoubleAnimation moveTopAnimation = new DoubleAnimation(Canvas.GetTop(fElement), point.Y, duration, FillBehavior.Stop); Storyboard.SetTargetProperty(moveTopAnimation, new PropertyPath(“(Canvas.Top)”)); // Create a storyboard to contain the […]

将任何XML文档绑定到WPF TreeView

我想使用TypeConverter将任何XML文档绑定到WPF TreeView。 我最初的解决方案是使用递归,但是当文档很大时,UI被严重束缚。 以下链接讨论了TypeConverter,但针对特定的节点/元素组合: http : //social.msdn.microsoft.com/Forums/en-US/wpf/thread/edd843b7-b378-4c2d-926f-c053dbd7b340 如果不知道XML文档是什么样的,该怎么办? 由于这仅用于显示目的,因此我不太关心function,我只想将XML绑定到TreeView。