gpt4 book ai didi

c# - WPF中的样式仅当针对文本 block 时,也会自动将相同样式应用于按钮内容

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

我真的想知道为什么下面的代码将WPF中的颜色或按钮内容也明确地仅指定为Textblock时,却将其变成橙色。当我将目标更改为按钮时,它可以正常工作,并且仅适用于按钮内容而不适用于文本块。为什么会有这种奇怪的行为?

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

最佳答案

基本上,您在WPF中看到的大多数文本Window最终都会转换为TextBlock。如果指定<Button Content="ABC"/>,则WPF实际执行的操作是在<TextBlock Text="ABC"/>创建可视树时将Button.Content放入ContentPresenter中。因此,您的隐式样式不适用于Button,而是适用于TextBlock,它是其内容的一部分。在WPF控件中,其默认模板是从其他控件构建的,而其他控件可以从其他控件构建,直到最终每个文本最终都变成TextBlock,这就是Microsoft的原因设置保护,通常隐式Style仅在模板中应用到从 System.Windows.Controls.Control 继承的元素上,以保护大多数基本元素(例如 TextBlock )(直接从 System.Windows.FrameworkElement 继承),避免在不知不觉中应用可能导致不必要的行为,性能问题或错误的复杂样式。因此,如果您在TextBlock或其子项之一中指定隐式Window.Resources样式,则该样式将不会自动应用于模板中,并且Button将保持默认颜色,除非将其移动到Application.Resources中,然后它也将应用于模板和您的Button文本将变为橙色。

关于c# - WPF中的样式仅当针对文本 block 时,也会自动将相同样式应用于按钮内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17416873/

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