Wpf 为什么在声明textblock样式时不能更改标签的前景?
我想将textblock的默认前景设置为FF575757,因此我在APP.xaml中编写了以下代码:Wpf 为什么在声明textblock样式时不能更改标签的前景?,wpf,Wpf,我想将textblock的默认前景设置为FF575757,因此我在APP.xaml中编写了以下代码: <Style TargetType="TextBlock"> <Setter Property="Foreground" Value="#FF575757"></Setter> </Style> 它运行良好 然而,在我使用控件模板对按钮进行编码后,我发现无论在XAML中设置前景值还是将其悬停
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="#FF575757"></Setter>
</Style>
它运行良好
然而,在我使用控件模板对按钮进行编码后,我发现无论在XAML中设置前景值还是将其悬停,我都无法更改前景:
<Button Foreground="Green">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Name="B" Cursor="{TemplateBinding Cursor}" SnapsToDevicePixels="True" UseLayoutRounding="True" ToolTip="{TemplateBinding ToolTip}">
<Label FontSize="{TemplateBinding FontSize}" Foreground="{TemplateBinding Foreground}" FontFamily="{TemplateBinding FontFamily}" Name="TB" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Content="{TemplateBinding Content}"></Label>
</Border>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsPressed" Value="false" />
<Condition Property="IsMouseOver" Value="true" />
</MultiTrigger.Conditions>
<MultiTrigger.Setters>
<Setter Property="Foreground" TargetName="TB" Value="White"/>
</MultiTrigger.Setters>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Button.Style>
</Button>
我花了很长时间才发现问题,最后我偶然发现了一件事:
如果我删除APP.xaml中的textblock样式,前景问题就可以解决了。
但我感到奇怪的是,我只声明textblock的默认样式,而不声明标签。为什么textblock的样式会影响标签控件?
更重要的是,如果风格导致了这一点。如何不仅设置默认前景,而且使其可以根据需要随时更改?wpf标签是一个内容控件
当您将标签的内容设置或绑定到字符串时,将创建一个文本块,并且它是您正在设置的文本。但是有没有其他方法让我将默认前景设置为FF5757,并且我可以随时更改它?您需要触发器位于文本块上。您正在按钮上设置前景。这不会超过按钮中文本块上的设置。但是,我已经将前景模板绑定到标签控件。当我更改按钮的前景时,Label控件的前景将改变,对吗?而且,它似乎不会覆盖它,而是类似于将前景限制为样式中的值。我用上面的代码创建了一个全新的项目来测试它,结果证明是真的。我不知道为什么会这样,就像我上面说的。标签上有一个文本块。您的样式设置textblock的前景,这意味着它将使用该值,而不是它将继承的任何值。