不使用主题覆盖ComboBox模板

4

我将来自Blend的ComboBox默认ControlTemplate添加到了UserControlResourceDictionary中,以便我可以重写ComboBoxControlTemplate。当我添加了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 等控件,那么使用 Luks 就会变得困难。如果您删除了 Aero 引用或者单独的 Chrome 类,您的模板代码将无法编译!DynamicResources 和模板中引用的缺失类是完全不同的概念。 - WPF-it
1个回答

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接