我制作了这个简单的程序,因为我想了解WPF的基础知识,但它不起作用。
在XAML中,我只有名为MainGrid
的网格和行为button1
的按钮button1_Click
,如下所示:
void button1_Click(object sender, RoutedEventArgs e)
{
Random rnd = new Random();
System.Windows.Shapes.Ellipse ellipse = new Ellipse();
ellipse.Fill = new SolidColorBrush(Colors.Red);
ellipse.Margin = new Thickness(rnd.Next(0,(int)System.Windows.SystemParameters.PrimaryScreenWidth-100),rnd.Next(1,(int)System.Windows.SystemParameters.PrimaryScreenHeight-101),0,0);
ellipse.Width = 100;
ellipse.Height = 100;
ellipse.Name = "ellipseTest";
if (ellipseShown) {
MainGrid.Children.Remove((UIElement)MainGrid.FindName("ellipseTest"));
}
MainGrid.Children.Add(ellipse);
}
但是当我单击按钮时,前一个椭圆不会消失,有时当我点击按钮时它什么也不做(不要创建新的椭圆,不要消失)。请帮助,谢谢。
答案 0 :(得分:0)
在运行时向可视树添加/删除对象时,需要使用RegisterName和UnregisterName来管理XAML命名空间。
private void Button_Click(object sender, RoutedEventArgs e)
{
Random rnd = new Random();
System.Windows.Shapes.Ellipse ellipse = new Ellipse();
ellipse.Fill = new SolidColorBrush(Colors.Red);
ellipse.Margin = new Thickness(rnd.Next(0, (int)System.Windows.SystemParameters.PrimaryScreenWidth - 100), rnd.Next(1, (int)System.Windows.SystemParameters.PrimaryScreenHeight - 101), 0, 0);
ellipse.Width = 100;
ellipse.Height = 100;
ellipse.Name = "ellipseTest";
if (ellipseShown)
{
System.Windows.Shapes.Ellipse ellipse0 = MainGrid.FindName("ellipseTest") as System.Windows.Shapes.Ellipse;
MainGrid.Children.Remove(ellipse0);
MainGrid.UnregisterName("ellipseTest");
}
MainGrid.RegisterName("ellipseTest", ellipse);
MainGrid.Children.Add(ellipse);
ellipseShown = true;
}
请参阅此文章:https://msdn.microsoft.com/en-us/library/ms746659(v=vs.110).aspx