随机椭圆生成程序

时间:2017-04-30 18:35:08

标签: c# wpf

我制作了这个简单的程序,因为我想了解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);
    }

但是当我单击按钮时,前一个椭圆不会消失,有时当我点击按钮时它什么也不做(不要创建新的椭圆,不要消失)。请帮助,谢谢。

1 个答案:

答案 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