为什么在声明文本块样式时不能更改标签的前景?

时间:2019-03-10 06:45:30

标签: wpf

我想将文本块的默认前景设置为#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的样式会影响标签控件?

更重要的是,如果样式导致了这种情况。我如何不仅可以设置默认前景,还可以使其随时随地更改?

1 个答案:

答案 0 :(得分:1)

wpf标签是内容控件。

当您将标签的内容设置或绑定到字符串时,将创建一个文本块,它就是您要设置的文本。