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与组合框关闭时显示的内容有关.我不会更改下拉列表或按钮.理想情况下,我只是覆盖SelectionBoxItemTemplate它ComboBox,但这只是readonly,所以据我所知我必须覆盖整个控件模板才能进行任何更改.)
[相关问题,但没有答案:调整控制模板仍然尊重操作系统的主题?]
要记住的一件事是,一旦为控件创建了ControlTemplate,就会替换整个ControlTemplate.
来自:http://msdn.microsoft.com/en-us/library/ms745683.aspx
我从中收集的是不,没有办法替换部分模板.该模板被视为一个单元.但是,可能有一些方法可以自定义模板以允许通过样式进行更改(可以基于其他样式).
如果MS创建了一个新主题,那么您将不得不更新自己的自定义控件模板以实现类似的主题.请记住,您正在替换,而不是增强控件模板.