在运行时替换控件的最佳方式是什么?

问题描述:

我对WPF相当陌生,我有这种情况:在运行时替换控件的最佳方式是什么?

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

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

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

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

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

+0

如果我有不同的模型和背景变化背后的不同逻辑,数据类型仍然有用吗? – Kugel 2010-07-22 15:42:55

+0

当然。关闭用于绑定源的类可以使它更有用。例如,如果您有两个不同的ViewModel类来驱动两个UI状态,则可以使用DataTypes和no x:Keys将两个DataTemplates定义为Resources。然后,您可以将任一ViewModel对象分配给ContentControl的Content属性,并且它将自动选取合适的模板。 – 2010-07-22 21:59:26

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

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