以编程方式添加到画布

问题描述:

我有将自定义用户控件添加到画布的代码。我原本是在Canvas的MouseRightButtonDown事件中使用它,但后来它将它移动到在ViewModel中触发的集合更改事件。当我从CollectionChanged事件调用完全相同的方法时,UI不会更新以反映画布上的UserControl。但是,当我使用画布上鼠标事件的完全相同的代码时,它的工作原理非常精美。以编程方式添加到画布

我已经做了一些挖掘和尝试了以下解决的事情无济于事:

  1. 调用画布

  2. 切换可见性属性,尝试更新UI的UpdateLayout请方法。

  3. 使用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事件发生。尝试在画布所在的用户控件已加载后将其添加到集合中。