我想将文本块的默认前景设置为#FF575757,所以我在APP.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的样式会影响标签控件?
更重要的是,如果样式导致了这种情况。我如何不仅可以设置默认前景,还可以使其随时随地更改?
答案 0 :(得分:1)
wpf标签是内容控件。
当您将标签的内容设置或绑定到字符串时,将创建一个文本块,它就是您要设置的文本。