【问题标题】:What is the best way to replace controls at runtime?在运行时替换控件的最佳方法是什么?
【发布时间】:2010-07-22 08:53:40
【问题描述】:

我是 WPF 的新手,我有这种情况:

我有一个应用程序,其中包含一个区域,在该区域中应在不同时间(不同的应用程序状态)显示不同的控件集。

我想知道 WPF 中的方法是什么?

在 winforms 中,我会让控件在运行时可见/不可见。如果控件太多,我会将它们分组到 Panels/UserControls 上并显示/隐藏它们。

我的直觉告诉我在 WPF 中有更好的方法。

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    在 WPF 中有很多选项可以做到这一点。除了通过设置可见性来隐藏和显示单个或一组控件之外,您还可以使用不同的 DataTemplate 来包含每个状态的控件集并在它们之间切换。您所需要的只是一个可以在其上设置 ContentTemplate 的 ContentControl。然后可以使用触发器、绑定、来自代码或使用 ContentTemplateSelector 选择模板来将 ContentTemplate 值切换到不同的 DataTemplate。

    【讨论】:

    • 如果我有不同的模型和变化区域背后的不同逻辑,数据模板是否仍然有用?
    • 当然。切换用于 Binding 源的类可以使其更加有用。例如,如果您有两个不同的 ViewModel 类来驱动两个 UI 状态,您可以将两个 DataTemplates 定义为只有 DataTypes 而没有 x:Keys 的资源。然后,您可以将任一 ViewModel 对象分配给 ContentControl 的 Content 属性,它会自动选择正确的模板。
    【解决方案2】:

    Visibility 属性完美地描述了您以前的 winforms 习惯。

    您还需要查看Visual States。这将允许您隐藏/显示多个控件,甚至更改其他属性(即启用状态、字体颜色)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-31
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 2021-04-12
      相关资源
      最近更新 更多