【问题标题】:Subclassing WPF control themes, why not only PARTIAL subclass子类化 WPF 控件主题,为什么不只是 PARTIAL 子类
【发布时间】:2011-11-04 00:38:14
【问题描述】:

读了这么多,关于继承的知识也这么多,我找不到任何直接的答案,所以就这样吧。

如果你有一个派生的基类来做某些事情,看起来或以某种方式行动,你可以将它子类化并获得父类的所有功能,只需要稍微修改差异。与 WPF 主题一起工作似乎并不相同......更具体地说,组合框控件(与文本框类似的问题,但这显然不那么复杂)。

通过查看Control Template Examples,他们讨论了它的整个结构、边框、背景、字形、动作、属性等。

如果我想要对组合框做的唯一事情是将它的边框更改为红色,如果其中有错误,那么看来,我必须基本上重新定义整个事物并以某种方式放入我的自定义触发器设置/要实现的颜色。

文本框控件及其创建方式有些相似。当尝试使用背景颜色时,它具有命名控件...您不能只说...背景 = 一些静态画笔值。

有哪些快捷方式只允许覆盖这些小元素,而无需重新创建整个模板控件。我可以想象如果你错过了一件简单的事情,网格、选项卡式控件和其他可能会变得非常混乱的东西会发生什么。

我还看到一些控件是由 OTHER Control.Templates 组成的,所以我怎么能附加到更改控件模板的单个元素上的属性设置...例如组合框有控件切换按钮的模板。从此,它通过 x:Name="Border" 有一个边框,我想在派生样式中更改那个元素。

谢谢

【问题讨论】:

    标签: wpf themes subclass


    【解决方案1】:

    我可能无法理解您的问题。但从我得到的是: 是的,你不能部分实现模板,事实上我不知道这怎么可能。但是,如果你想改变某些事情,你当然可以这样做。您可以在给定的子控件上创建样式、模板、画笔等作为 DependencyProperties 并使用 TemplateBinding 绑定到它们。

    请记住,WPF 始终允许动态更改模板。如果我们可以部分更改模板,这可能会损害性能或变得混乱和复杂。不过,您可以使用 ContentControls 和 TemplateBinding 或简单地使用触发器来做到这一点。

    对于我的自定义控件,可能包含多个部分子控件,我通常为它们添加样式。例如,自定义 ComboBox 将包含 ToggleButtonStyle

    不过,最好的一件事是添加控制模板触发器,而无需重新实现模板。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      相关资源
      最近更新 更多