按钮点击更新画布上的图像位置

时间:2015-01-13 14:10:43

标签: c# wpf image button canvas

我有一种在鼠标单击时在画布上绘制节点(椭圆)的方法,然后当点击其中一个节点时,一个方法根据该节点进行一些计算' sx,y并放置一个图像我放在代码中的文件路径。我试图这样做,当我点击另一个节点时,图像的位置会根据新节点的x,y进行更新。我尝试执行此处列出的内容Draw rectangle and update it on every mouse click,但它没有删除最后一张图片。

这是我点击按钮的方法 -

    private void FindROVButton_Click(object sender, RoutedEventArgs e)
    {

        if (SelectedNode != null) // SelectedNode is the currently clicked node
        {
            if (System.Windows.MessageBox.Show("Calculate ROV location from \"" + SelectedNode.Name + "\"?", "Calculate ROV Location", MessageBoxButton.YesNoCancel, MessageBoxImage.Warning) == MessageBoxResult.Yes)
            {

                Point rovPosition = new Point();
                rovPosition = calculateROV_position(SelectedNode.X, SelectedNode.Y, SelectedNode.Range, SelectedNode.Bearing);


                Image rov = new Image();
                rov.Source = new BitmapImage(new Uri("C:\\Pic\\Example.png"));
                rov.Width = 30;
                rov.Height = 30;

                Canvas.SetLeft(rov, (rovPosition.X - (rov.Width / 2.0)));
                Canvas.SetTop(rov, (rovPosition.Y - (rov.Height / 2.0)));

                canvas1.Children.Add(rov);
            }
        }
    }

在将新的rov放置在画布上之前的任何地方调用canvas1.Children.Remove(rov)都不起作用。它总是在画布上添加一个新的。我猜它与所选节点的所有事实有关。

1 个答案:

答案 0 :(得分:0)

想出来。我需要先在方法之前创建新的Image,然后在canvas1.Children.Add(rov)之前的方法中使用canvas1.Children.Remove(rov)。

Image rov = new Image();
private void FindROVButton_Click(object sender, RoutedEventArgs e)
{

    if (SelectedNode != null)
    {
        if (System.Windows.MessageBox.Show("Calculate ROV location from \"" + SelectedNode.Name + "\"?", "Calculate ROV Location", MessageBoxButton.YesNoCancel, MessageBoxImage.Warning) == MessageBoxResult.Yes)
            {

                Point rovPosition = new Point();
                rovPosition = calculateROV_position(SelectedNode.X, SelectedNode.Y, SelectedNode.Range, SelectedNode.Bearing);

                rov.Source = new BitmapImage(new Uri("D:\\Dev\\trunk\\Software\\Nav Assist\\Data\\Hull Cleaner Tiny Image.png"));
                canvas1.Children.Remove(rov);

                rov.Width = 30;
                rov.Height = 30;

                Canvas.SetLeft(rov, (rovPosition.X - (rov.Width / 2.0)));
                Canvas.SetTop(rov, (rovPosition.Y - (rov.Height / 2.0)));

                canvas1.Children.Add(rov);
            }
        }
    }

上面的代码工作正常。