【发布时间】:2017-04-30 18:35:08
【问题描述】:
我制作了这个简单的程序,因为我想了解 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);
}
但是当我单击按钮时,前一个椭圆不会消失,有时当我单击按钮时它什么也不做(不要创建新的椭圆,不要消失)。请帮忙,谢谢。
【问题讨论】:
-
如果它没有创建一个新的椭圆,那你怎么能说没有消失呢?除此之外,您是否真的设置了
ellipseShown字段?上面的代码中没有任何内容。无论如何,您都做错了:您应该创建一个表示椭圆的视图模型数据结构,然后在 XAML 中按数据模板呈现该模型。如果您一次只想要一个椭圆,那么只需一个带有 X 和 Y 的模型。如果您想要多个,请使用ItemsControl。在任何一种情况下,使用Canvas,而不是Grid,和Canvas.Left/Canvas.Top,而不是Margin来定位对象。 -
如此处所述,您的问题过于广泛。您没有包含一个好的minimal reproducible example,而且您的代码与好的 WPF 代码相差太远。基于上述内容的答案基本上是为您从头开始编写程序。以下是我过去回答的问题的一些链接,这些问题与您正在尝试做的事情非常相似:stackoverflow.com/a/28338925 和 stackoverflow.com/a/33749132。也许您可以将这些作为在您的问题上取得进展的基础。