以编程方式添加到画布
问题描述:
我有将自定义用户控件添加到画布的代码。我原本是在Canvas的MouseRightButtonDown事件中使用它,但后来它将它移动到在ViewModel中触发的集合更改事件。当我从CollectionChanged事件调用完全相同的方法时,UI不会更新以反映画布上的UserControl。但是,当我使用画布上鼠标事件的完全相同的代码时,它的工作原理非常精美。以编程方式添加到画布
我已经做了一些挖掘和尝试了以下解决的事情无济于事:
调用画布
切换可见性属性,尝试更新UI的UpdateLayout请方法。
使用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;
});
答
这是可能的画布已经initalized前collectonChanged事件发生。尝试在画布所在的用户控件已加载后将其添加到集合中。