1

在此处输入图像描述我真的很想知道为什么下面的代码在 WPF 中使颜色或按钮内容也变成橙色,而它显然只针对 Textblock。当我将目标更改为按钮时,它工作正常并且仅应用于按钮内容而不应用于文本块。为什么会出现这种奇怪的行为?

<Style TargetType="{x:Type TextBlock}">
            <Setter Property="Foreground" Value="orange" />
</Style>
4

1 回答 1

1

基本上,您在 WPF 中看到的大部分文本Window最终都会转换为TextBlock. 如果您指定WPF 在创建可视化树时<Button Content="ABC"/>实际执行的操作。因此,您的隐式样式不适用于但属于其内容的一部分。在 WPF 中,控件具有其默认模板,该模板是从其他控件构建的,这些控件可以从其他控件构建,直到最终每个文本都结束,因为这就是 Microsoft 设置保护的原因,并且通常在模板中隐式仅应用于继承自的元素以保护最基本的元素 like ,直接继承自<TextBlock Text="ABC"/>Button.ContentContentPresenterButtonTextBlock

TextBlockStyleSystem.Windows.Controls.ControlTextBlockSystem.Windows.FrameworkElement,避免在不知不觉中应用可能导致不良行为、性能问题或错误的复杂样式。因此,如果您在或其子项目之一中指定您的隐式TextBlock样式,它将不会在模板中自动应用并且您将保留默认颜色,除非您将其移入,否则它也将应用于模板,您的文本将变为橙。Window.ResourcesButtonApplication.ResourcesButton

于 2013-07-02T09:00:55.217 回答