以编程方式在WPF中添加/删除网格?

时间:2017-07-25 21:47:36

标签: c# wpf

我是WPF的新手之前曾经和WinForms合作过,我仍然试图了解WPF的心态,因为我的背景是嵌入式编码,似乎已经完全消除了。

在我的项目中,我需要创建一个Grid Panel“模板”,我将其称为“Fred”(在这种情况下,Fred只是一个图形自定义按钮的集群),并以编程方式将此多个实例生成到UI基于外部事件。我发现很难看到一个明显的方法来做到这一点(也许这是因为可能有多种方式?)并且已经研究过ControlTemplates,样式和自定义元素。我怀疑解决方案在于后者,但我也担心我可能会以错误的方式考虑这个问题。对我而言,将Fred视为Grid资源似乎是有意义的,我可以在需要创建新实例时以某种方式以编程方式调用,但鉴于我发现很难“谷歌”这个事情,那么也许我会解决这个问题错?

如果这有点模糊,我道歉。

我的问题有两个方面:

  1. 这是实现我的最终目标的明智方法吗,即如果我需要以编程方式生成这个自定义按钮(Fred)集群,那么将它们包含在可由主C#访问的网格中是否有意义或者是否有一种更为标准的方式来实现这一目标?

  2. 根据(1)的答案是否有代码示例来实现这一目标?

1 个答案:

答案 0 :(得分:0)

您正在寻找的概念是“ItemsControl”(它本身是一个可用的类,并且还有几个派生类,如ListViewListBox)与DataTemplate的组合。

在这种情况下,您可以将“Fred”设为DataTemplate(通常作为XAML中ItemControl ItemTemplate属性的直接后代。然后,将ItemsSource绑定到一个集合(对于运行时添加/删除,应为ObservableCollection<T>)。

所有这些都依赖于使用MVVM模式(来自WinForms,你可能不是)。我建议查看MSDNStack Overflow,Reed Copsey的精彩博客系列:http://reedcopsey.com/series/windows-forms-to-mvvm/或只是谷歌“WPF和MVVM”以了解详情。

明确回答您的问题:

  1. 是;你有正确的概念,但在WinForms术语/实践中考虑它。请改用MVVM。
  2. 是;有很多可用的资源。