gpt4 book ai didi

WPF 仅更改组合框的 PART_EditableTextBox 上的属性

转载 作者:行者123 更新时间:2023-12-03 03:20:46 26 4
gpt4 key购买 nike

我想更改默认 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:

因此,要正确执行此操作,您必须复制并修改每个主题(Classic、Luna、Aero、Royale 等)的模板,并执行必要的步骤,以便在主题更改时加载不同的主题模板...以便您的控件具有“主题感知”。

<小时/>

在运行时应用模板后修改可视化树

如果您是控件的作者或者您创建了控件的派生版本...那么您可以等到应用模板,然后在 OnApplyTemplate 中...然后您可以进行搜索对于可视化树中的“部件”,然后在运行时修改可视化树/更改属性(即您可以更改 PART_EditableTextBox 的背景)。

但是,如果您依赖隐式样式(就像您一样),或者不想或无法将所有控件替换为 XAML 中的派生版本,则此方法不起作用。

<小时/>

在运行时获取 ControlTemplate 的副本,并修改“部分”

还有另一种可能性......在运行时获取控件的ControlTemplate......(这将用于当时设置的当前主题)......修改它,然后将其设置到控件上。

这样做的好处是,如果系统中有新主题,而您事先不知道其名称(因此没有为其设计模板),那么您的控件模板将不会被选取来自通用主题(因此不合适)......您有更好的机会让外观更好地适应新主题。但这有点像黑客。

关于WPF 仅更改组合框的 PART_EditableTextBox 上的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12011610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com