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

时间:2015-08-23 07:38:33

标签: c# wpf draw lines

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

2 个答案:

答案 0 :(得分:0)

为什么不像caution一样删除它。也许你的问题是Line对象是方法的本地对象,你可以使它成为一个全局变量并保持对它的引用,这样你就可以随时删除该行。

Children.Remove(line)

答案 1 :(得分:0)

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

您可能需要做的是invalidate您的用户界面。您需要重绘或刷新UI才能动态更改内容。

您可以使用UIElement.InvalidateVisual方法。

如果它不起作用,您可能希望传递empty delegate来刷新UI。有关如何操作,请参阅this article。 基本上,你会做这样的事情:

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元素后。