我想更改默认 wpf 组合框的 PART_EditableTextBox (例如更改背景)。
我尝试添加这样的样式:
<Style TargetType="{x:Type ComboBox}" BasedOn="{StaticResource {x:Type ComboBox}}">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate TargetType="ComboBox">
<TextBox x:Name="PART_EditableTextBox" Background="AntiqueWhite"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
但这会导致默认模板的其余部分被忽略。
有没有办法可以覆盖 PART_EditableTextBox 的特定属性,或者我是否必须复制整个控件模板并在其中进行更改?
改变控件外观的一些不同方法......
复制控件模板、编辑它并在样式中使用它
当复制和修改控件的模板时...您必须记住一件事...主题。
根据主题(即不同的镶边),控件可能具有完全不同的模板设计...所以您的问题是...您选择复制、修改然后在控件上使用哪个模板。
不管您选择哪一个...您都会遇到问题...当有人在与您从中复制模板的主题不同的主题中运行 Windows 时...那么该控件将看起来错误/不正确地方。
要查看不同模板在不同主题中的外观...使用 ShowMeTheTemplate:
- http://www.sellsbrothers.com/posts/details/2091 http://www.sellsbrothers.com/posts/details/2091
因此,要正确执行此操作,您必须复制和修改每个主题(Classic、Luna、Aero、Royale 等)的模板,并执行必要的步骤,以便在主题更改时加载不同的主题模板...这样您的控件就具有“主题意识”。
覆盖 WPF 模板时,是否必须单独覆盖每个主题的模板? https://stackoverflow.com/questions/2515468/when-overriding-wpf-templates-do-i-have-to-override-each-themes-template-separa
http://windowsclient.net/blogs/nidonocu/archive/2008/02/16/wpf-themes-and-control-libraries.aspx http://windowsclient.net/blogs/nidonocu/archive/2008/02/16/wpf-themes-and-control-libraries.aspx
- http://blogs.windowsclient.net/nidonocu/archive/2008/03/03/wpf-themes-and-control-libraries-part-2.aspx http://blogs.windowsclient.net/nidonocu/archive/2008/03/03/wpf-themes-and-control-libraries-part-2.aspx
在运行时应用模板后修改可视化树
如果您是控件的作者或者您创建了控件的派生版本...那么您可以等到应用模板,然后再OnApplyTemplate
...然后您可以在可视化树中寻找“零件”,然后在运行时修改可视化树/更改属性(即您可以更改 PART_EditableTextBox 的背景)。
但是,如果您依赖隐式样式(就像您一样),或者不想或无法将所有控件替换为 XAML 中的派生版本,则此方法不起作用。
在运行时获取 ControlTemplate 的副本,并修改“部分”
还有另一种可能性...在运行时获取控件的 ControlTemplate...(这将用于当时设置的当前主题)...修改它,然后将其设置到控件上。
这样做的好处是,如果系统中存在您事先不知道其名称的新主题(因此没有为其设计模板),那么您的控件模板就不是从通用主题中选取的(因此不合适)......你有更好的机会让外观更好地适应新主题。但这有点像黑客。
https://siderite.dev/blog/cloning-wpf-controltemplate.html https://siderite.dev/blog/cloning-wpf-controltemplate.html
在运行时定义 WPF ControlTemplate https://stackoverflow.com/questions/732736/define-a-wpf-controltemplate-at-runtime
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)