【问题标题】:updating image position on canvas on button click在按钮单击时更新画布上的图像位置
【发布时间】:2015-01-13 14:10:43
【问题描述】:

我有一种方法可以在鼠标单击时在画布上绘制节点(椭圆),然后当单击其中一个节点时,一种方法会根据该节点的 x,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) 都不起作用。它只是总是在画布上添加一个新的。我猜这与它完全基于所选节点的事实有关。

【问题讨论】:

    标签: c# wpf image button canvas


    【解决方案1】:

    想通了。我需要先在方法之前创建新的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);
                }
            }
        }
    

    上面的代码运行良好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多