2010-08-25 148 views
0

我有將自定義用戶控件添加到畫布的代碼。我原本是在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; 
}); 

回答

0

這是可能的畫布已經initalized前collectonChanged事件發生。嘗試在畫布所在的用戶控件已加載後將其添加到集合中。

相關問題