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

C# 以编程方式在WPF中添加/删除网格?,c#,wpf,C#,Wpf,我是WPF的新手,以前偶尔使用WinForms,现在我仍在尝试了解WPF的想法,考虑到我的背景是嵌入式编码,这种想法似乎已经不存在了 在我的项目中,我需要创建一个网格面板“模板”,我将其称为“Fred”(在本例中,Fred只是一组图形化定制按钮),并基于外部事件以编程方式将多个实例生成到UI。我发现很难找到一个明显的方法来实现这一点(可能是因为可能有多种方法?),并且已经研究了ControlTemplates、样式和自定义元素。我怀疑解决办法在于后者,但我也担心我可能用错误的方式思考这个问题。对

我是WPF的新手,以前偶尔使用WinForms,现在我仍在尝试了解WPF的想法,考虑到我的背景是嵌入式编码,这种想法似乎已经不存在了

在我的项目中,我需要创建一个网格面板“模板”,我将其称为“Fred”(在本例中,Fred只是一组图形化定制按钮),并基于外部事件以编程方式将多个实例生成到UI。我发现很难找到一个明显的方法来实现这一点(可能是因为可能有多种方法?),并且已经研究了ControlTemplates、样式和自定义元素。我怀疑解决办法在于后者,但我也担心我可能用错误的方式思考这个问题。对我来说,将Fred可视化为网格资源似乎是有意义的,当我需要创建一个新实例时,我可以通过编程方式调用它,但考虑到我发现很难“谷歌”这个东西,那么也许我在这方面完全错了

如果这有点含糊,我道歉

我的问题有两个:

  • 这是实现我最终目标的合理方式吗?即,如果我需要以编程方式生成这组自定义按钮(Fred),那么将这些按钮包含在主C#可以访问的网格中是否有意义?或者我是否缺少一种更标准的方式来实现这一点

  • 根据(1)的答案,是否有代码示例来实现这一点


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

    在本例中,您将使“Fred”成为
    DataTemplate
    (通常是XAML中
    ItemControl
    s
    itemtplate
    属性的直接后代)。然后将
    ItemsSource
    绑定到集合(对于运行时添加/删除,应该是
    observedcollection

    所有这些都依赖于使用MVVM模式(来自WinForms,您可能没有)。我建议看一看Reed Copsey的优秀博客系列:或者只是谷歌“WPF和MVVM”来了解更多信息

    要明确回答您的问题:

  • 对,;您有正确的概念,但正在用WinForms术语/实践来考虑它。改用MVVM
  • 对,;有许多可用的资源

  • 非常感谢。非常感谢。