此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);
}
}
答案 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
元素后。