gpt4 book ai didi

.net - 使用多个模板的 WPF 控件创作

转载 作者:行者123 更新时间:2023-12-05 00:58:43 26 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

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

关于.net - 使用多个模板的 WPF 控件创作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13067555/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com