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);
}
}
你为什么不像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
元素之后。