我需要更改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?]
答案 0 :(得分:5)
要记住的一件事是一次 为您创建一个ControlTemplate 控制,你正在取代整个 的ControlTemplate。
来自:http://msdn.microsoft.com/en-us/library/ms745683.aspx
我从中收集到的不是,没有办法替换部分模板。该模板被视为一个单元。但是,可能有一些方法可以自定义模板以允许通过样式进行更改(可以基于其他样式)。
如果MS制作新主题,则必须更新自己的自定义控件模板以实现类似主题。请记住,您正在替换,而不是增强控制模板。