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

时间:2010-03-25 12:39:57

标签: .net wpf themes controltemplate

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

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

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

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

xmlns:mwt="...blah blah...=PresentationFramework.Luna"

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

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

(我正在改变的位与组合框关闭时显示的TextBlock有关。我没有更改下拉列表或按钮。理想情况下,我只是覆盖SelectionBoxItemTemplate上的ComboBox {{1}},但这只是readonly,所以据我所知,我必须覆盖整个控件模板才能进行任何更改。)

[相关问题,但没有答案:Adjust a Control Template and still respect the Theme of the OS?]

1 个答案:

答案 0 :(得分:5)

  

要记住的一件事是一次   为您创建一个ControlTemplate   控制,你正在取代整个   的ControlTemplate。

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

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

如果MS制作新主题,则必须更新自己的自定义控件模板以实现类似主题。请记住,您正在替换,而不是增强控制模板。