以编程方式添加到画布

时间:2010-08-25 16:29:30

标签: silverlight canvas

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

我做了一些挖掘并尝试了以下方法来解决问题无济于事:

  1. 调用Canvas的UpdateLayout方法

  2. 切换可见性属性以尝试更新UI。

  3. 使用UserControl的Dispatcher调用它来调用匿名委托:Dispatcher.BeginInvoke(()=> code);

  4. 以下是我正在使用的代码示例:

    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;
    });
    

1 个答案:

答案 0 :(得分:0)

有可能在画布初始化之前发生了collectonChanged事件。

加载了画布所在的用户控件之后,尝试将其添加到集合中