前景不适用于标签

时间:2019-05-30 05:53:54

标签: wpf templates styles

我有一些这样的标签:

 <Label x:Name="ledCalculate" Width="Auto" Content="Calculate" Height="25" FontFamily="Cambria" FontSize="18.667" VerticalContentAlignment="Bottom" Padding="10,0,0,0"  BorderThickness="0,0,0,1" Style="{StaticResource RightPanelLabels}" Grid.Row="11"/>

我为其定义了样式:

 <Style TargetType="Label" x:Key="RightPanelLabels" BasedOn="{StaticResource 
    {x:Type Label } }">

        <Setter Property="Foreground" Value="#FFEABEBE"></Setter>
        <Setter Property="BorderBrush" Value="#FF818080"></Setter>
        <Setter Property="BorderThickness" Value="0,0,0,1"></Setter>
    </Style>

样式中的边框厚度设置器适用于控件,并且在样式中具有较高的优先级,Visual Studio忽略其在本地的值,但是样式中的前景设置器不适用,当我在本地设置时,它适用,

为什么样式的边框粗度优先,而局部的前景优先呢???????

我知道对于像波纹管这样的标签有一个默认模板,它们具有IsEnabled的触发器,该模板是这样的:

<ControlTemplate TargetType="{x:Type Label}">
    <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="True">
        <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
    </Border>
    <ControlTemplate.Triggers>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
        </Trigger>
    </ControlTemplate.Triggers>
 </ControlTemplate>

有人可以帮助我吗? 对不起,我的英语。

2 个答案:

答案 0 :(得分:0)

您必须在样式设置器中更改属性名称

<Setter Property="TextBlock.Foreground" Value="#FFEABEBE">

答案 1 :(得分:0)

所有本地样式优先于定义的样式,因此内联样式将始终覆盖资源中定义的其他样式。 当我运行代码时,我发现Style的BorderThickness也被BorderThickness的本地内联样式值覆盖。

我也很想听听是否有解决方法。 我也找到了这篇文章,希望对您有所帮助Same problem with a style trigger though

编辑:

尝试使用此方法发现的几种不同方法后,我们可以覆盖标签的内联Foreground样式,但是我不知道这是否是最健康的方法

<Style TargetType="{x:Type Label}">
            <Setter Property="ContentTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <TextBlock Text="{Binding}"
                           Foreground="Red" />
                    </DataTemplate>
                </Setter.Value>
            </Setter>
  </Style>

 <Label FontSize="50" Foreground="Black"> I am Black inline, Red on Style </Label>