3

我正在尝试创建一个自定义 WPF 控件,该控件具有多个 UI 元素以在不同时间在不同情况下显示,因此无法在同一可视化树中明智地创建它们。我为每个元素创建了依赖属性,类型为UIElement. 这运作良好。

当涉及到样式控制时,它的效果并不好。虽然我可以为设置自定义属性的控件定义样式,但该样式只实例化一次。因此,如果我的自定义控件的多个实例使用相同的样式,则只有最后一个要定义的实例才能获得可视化树。我知道这是因为样式UIElement直接设置而不是使用模板,并且模板基础结构在其中定义了树的多个实例(请参阅https://stackoverflow.com/a/8702180/1453269

我的问题是,我如何定义一个采用多个模板的控件,以便应用它们?我尝试创建类型的依赖对象DataTemplate。如果我使用 aContentPresenter来显示模板,它只会将 DataTemplate 的类型名称显示为文本。我希望它以与 WPF 的其余部分一致的方式将模板值应用于我的第一个依赖项属性。我曾假设有一种方法可以利用 WPF 中的模板基础结构,但我找不到如何做到这一点。

4

1 回答 1

1

关键是FrameworkTemplate上的LoadContent方法(DataTemplate 派生自该方法)。此方法创建模板内容的副本。

因此,为了实现多个模板,我为我想要的每个模板化 UI 属性创建了一个 Content 和一个 Template 对依赖属性。我注册了关于 XXXTemplate 依赖属性的更改通知。事件处理程序调用了一个方法,该方法将匹配的 XXXContent 依赖属性设置为在新模板值上调用的 LoadContent 的返回值。

在包含对象的控件模板中,我可以使用绑定到所需 UIElement 的 XXXContent 属性的 ContentPresenter。

于 2012-11-02T06:18:20.633 回答