c#如何在wpf中擦除绘制的线条

本文关键字:绘制 擦除 wpf | 更新日期: 2023-09-27 18:09:13

这个WPF应用程序有4个输入,您可以设置两个点的x, y值,并绘制黑线。问题是……在我画完这些线之后,我无法删除它们,所以当我想创建新线时,重新启动应用程序是荒谬的。以下是我的内容:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
    Line objLine;
    private void button_Click(object sender, RoutedEventArgs e)
    {
        string tb1 = textBox.Text;
        string tb2 =  textBox1.Text;
        string tb3 = textBox3.Text;
        string tb4 = textBox4.Text;
        double tb1int = double.Parse(tb1);
        double tb2int = double.Parse(tb2);
        double tb3int = double.Parse(tb3);
        double tb4int = double.Parse(tb4);
        Line objLine = new Line(); //point input
        objLine.Stroke = System.Windows.Media.Brushes.Black;
        objLine.Fill = System.Windows.Media.Brushes.Black;
        objLine.X1 = tb1int;
        objLine.Y1 = tb2int;

        objLine.X2 = tb3int;
        objLine.Y2 = tb4int;
        hello.Children.Add(objLine);
}
 private void button2_Click(object sender, RoutedEventArgs e)
    {
        if (objLine != null)
        {
            hello.Children.Remove(objLine);
        }
    }

c#如何在wpf中擦除绘制的线条

你为什么不像Children.Remove(line)那样删除它呢?也许你的问题是Line对象是局部的方法,你可以使它成为一个全局变量,并保存对它的引用,这样你就可以随时删除行。

Line objLine;
private void button_Click(object sender, RoutedEventArgs e)
{
    objLine = new Line(); //point input
    ...
    hello.Children.Add(objLine);
}
private void removeButton_Click(object sender, RoutedEventArgs e)
{
    if(objLine != null) {
       hello.Children.Remove(objLine);
    }
}

我相信你已经试过从hello容器中删除line元素(我自己做的第一件事:)),没有任何事情发生。

您可能需要做的是invalidate您的UI。为了动态更改内容,您需要重新绘制或刷新UI。

你可以使用UIElement。InvalidateVisual方法。

或者如果它不起作用,你可能想要传递一个empty delegate来刷新你的UI。关于如何做到这一点,请参阅这篇文章。基本上,你会做这样的事情:

public static class ExtensionMethods
{
  private static Action EmptyDelegate = delegate() { };
  public static void Refresh(this UIElement uiElement)
  {
    uiElement.Dispatcher.Invoke(DispatcherPriority.Render, EmptyDelegate);
  }
}

然后在容器上调用hello.Refresh()。当然,在去掉line元素之后。