【问题标题】:WPF Control Authoring with multiple Templates使用多个模板进行 WPF 控件创作
【发布时间】:2012-10-25 11:26:02
【问题描述】:

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

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

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

【问题讨论】:

    标签: .net wpf controls datatemplate


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,正是我一直在寻找的!
    猜你喜欢
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多