覆盖WPF模板时,我是否必须单独覆盖每个主题的模板?

Sim*_*ens 4 .net wpf themes controltemplate

我需要更改WPF ComboBox模板的一小部分.

如果我为Luna主题拍摄现有模板的副本并进行更改,则一切正常.但是如果用户有不同的主题,我ComboBox保留它的自定义主题(显然基于Luna),所以看起来不合适.

是否有任何方法可以覆盖模板的某些部分,因此大多数模板仍然尊重Windows主题?

我注意到模板的某些部分定义了一个mwt命名空间,并明确引用了Luna:

xmlns:mwt="...blah blah...=PresentationFramework.Luna"
Run Code Online (Sandbox Code Playgroud)

也许有一些方法让这个mwt命名空间引用当前的主题,而不是具体的Luna名称?

或者我是否必须为每个主题提供模板的自定义副本?如果MS创建一个新主题会发生什么,那么我是否必须更新我的模板以支持它?

(我正在更改的位TextBlock与组合框关闭时显示的内容有关.我不会更改下拉列表或按钮.理想情况下,我只是覆盖SelectionBoxItemTemplateComboBox,但这只是readonly,所以据我所知我必须覆盖整个控件模板才能进行任何更改.)

[相关问题,但没有答案:调整控制模板仍然尊重操作系统的主题?]

Ed *_*lez 5

要记住的一件事是,一旦为控件创建了ControlTemplate,就会替换整个ControlTemplate.

来自:http://msdn.microsoft.com/en-us/library/ms745683.aspx

我从中收集的是不,没有办法替换部分模板.该模板被视为一个单元.但是,可能有一些方法可以自定义模板以允许通过样式进行更改(可以基于其他样式).

如果MS创建了一个新主题,那么您将不得不更新自己的自定义控件模板以实现类似的主题.请记住,您正在替换,而不是增强控件模板.

  • 我担心情况可能如此.这似乎是对模板系统的限制.这意味着没有完全替换它就无法调整控件外观.谢谢你指出这个参考. (2认同)