如何在画布事件处理程序中设置children属性?

时间:2018-12-08 22:32:25

标签: c# wpf

我有一块画布,里面有一个形状。该画布具有一个MouseLeftButtonDown事件处理程序。然后我去将画布中的形状移到新位置,但是什么也没发生。

以下是添加形状的方式:

public MainWindow()
    {
        InitializeComponent();
        Rectangle ShapeRect = new Rectangle() { Width=10,Height=10,Fill=Brushes.Blue};
        Canvas_1.Children.Add(ShapeRect);            
    }

这是事件处理程序:

private void Canvas_1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        Canvas c = Canvas_1;
        var firstchild = c.Children[0];
        var RectCopy = c.Children.OfType<Rectangle>().FirstOrDefault();              

        Canvas.SetTop(RectCopy, Canvas.GetTop(RectCopy) + 500);
        Canvas.SetLeft(RectCopy, Canvas.GetLeft(RectCopy) + 500);
    }

我已经测试了代码,它没有错误,所有行都可以运行,但是显然没有效果。我认为这是由于RectCopy不是ShapeRect造成的。欢迎任何其他解决方案或答案。谢谢。

1 个答案:

答案 0 :(得分:0)

在Initialize方法的底部添加以下行:

Canvas.SetTop(ShapeRect, 0);
Canvas.SetLeft(ShapeRect, 0);

到达处理程序时,Canvas.GetTop(...)的值为NaN