我真的很想知道为什么下面的代码在 WPF 中使颜色或按钮内容也变成橙色,而它显然只针对 Textblock。当我将目标更改为按钮时,它工作正常并且仅应用于按钮内容而不应用于文本块。为什么会出现这种奇怪的行为?
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Foreground" Value="orange" />
</Style>
基本上,您在 WPF 中看到的大部分文本Window
最终都会转换为TextBlock
. 如果您指定WPF 在创建可视化树时<Button Content="ABC"/>
实际执行的操作。因此,您的隐式样式不适用于但属于其内容的一部分。在 WPF 中,控件具有其默认模板,该模板是从其他控件构建的,这些控件可以从其他控件构建,直到最终每个文本都结束,因为这就是 Microsoft 设置保护的原因,并且通常在模板中隐式仅应用于继承自的元素以保护最基本的元素 like ,直接继承自<TextBlock Text="ABC"/>
Button.Content
ContentPresenter
Button
TextBlock
TextBlock
Style
System.Windows.Controls.Control
TextBlock
System.Windows.FrameworkElement
,避免在不知不觉中应用可能导致不良行为、性能问题或错误的复杂样式。因此,如果您在或其子项目之一中指定您的隐式TextBlock
样式,它将不会在模板中自动应用并且您将保留默认颜色,除非您将其移入,否则它也将应用于模板,您的文本将变为橙。Window.Resources
Button
Application.Resources
Button