【问题标题】:Override ComboBox Template without theme覆盖没有主题的组合框模板
【发布时间】:2011-09-13 21:35:38
【问题描述】:

我将ComboBox 默认ControlTemplate(从Blend 复制)添加到UserControlResourceDictionary,这样我就可以覆盖ComboBox ControlTemplate。当我添加 ControlTemplate 时,我必须添加以下 xml 命名空间:

xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero" 

comboBox 默认模板中有三个对 PresentationFramework 主题中定义的对象的引用

<Microsoft_Windows_Themes:ButtonChrome ... >
<Microsoft_Windows_Themes:SystemDropShadowChrome ... > 
<Microsoft_Windows_Themes:ListBoxChrome ... > 

有没有办法删除这些类,但允许系统主题在运行时添加它们(就像通常那样)?所以我们不必在这个用户控件中有一个硬编码的主题。

编辑:我知道这些不是包装。然而,它们是指向主题的指针。如何在编译时仅使用占位符动态选择主题?

【问题讨论】:

  • 如果您使用 ButtonChromeSystemDropShadowChrome 等作为您的自定义模板的一部分,会很困难。如果您删除 aero 参考甚至个别 chrome 类,您的模板代码将无法编译! DynamicResources 和模板中提到的缺失类是完全不同的概念。

标签: wpf combobox controltemplate


【解决方案1】:

如果您在模板中使用这些类之一,则无法删除“mwt”命名空间。编译器会在编译过程中报错。尽管该程序集称为 Aero 主题,但我认为您可以在 Windows XP 上使用这些类而不会出现任何问题。它不是 Aero 控件的封装,而是 Windows Vista/7 控件外观的 WPF 实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    相关资源
    最近更新 更多