我有一些代码可以将自定义用户控件添加到画布中。我最初在Canvas的MouseRightButtonDown事件中使用它,但后来将它移动到在ViewModel中触发的集合更改事件。当我从CollectionChanged事件调用完全相同的方法时,UI不会更新以反映画布上的UserControl。但是,当我在画布上使用鼠标事件中完全相同的代码时,它的工作效果非常好。
我做了一些挖掘并尝试了以下方法来解决问题无济于事:
调用Canvas的UpdateLayout方法
切换可见性属性以尝试更新UI。
使用UserControl的Dispatcher调用它来调用匿名委托:Dispatcher.BeginInvoke(()=> code);
以下是我正在使用的代码示例:
CustomUserControl stub = new CustomUserControl();
stub.Width = 10;
stub.Height = 10;
stub.SetValue(Canvas.LeftProperty, xCurrent);
stub.SetValue(Canvas.TopProperty, yCurrent);
stub.MouseLeftButtonDown += this.Element_MouseLeftButtonDown;
stub.MouseMove += this.Element_MouseMove;
stub.MouseLeftButtonUp += this.Element_MouseLeftButtonUp;
this.Dispatcher.BeginInvoke(() =>
{
drawCanvas.Children.Add(stub);
drawCanvas.Visibility = Visibility.Visible;
this.Visibility = Visibility.Visible;
});
答案 0 :(得分:0)
有可能在画布初始化之前发生了collectonChanged事件。
加载了画布所在的用户控件之后,尝试将其添加到集合中