У меня есть несколько ярлыков, как это:

 <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>

Может кто-нибудь помочь мне? Извините за мой английский.

1
da jowkar 30 Май 2019 в 08:53

2 ответа

Лучший ответ

Все локальные стили имеют приоритет над определенными стилями, поэтому встроенные стили всегда будут переопределять другие стили, определенные в ресурсах. Когда я запустил код, я обнаружил, что стиль BorderThickness также переопределяется локальным значением встроенного стиля для BorderThickness.

Я тоже хотел бы услышать, есть ли обходной путь для этого. Я также нашел эту статью, надеюсь, она поможет Та же проблема с хотя стиль запуска

РЕДАКТИРОВАТЬ:

Попробовав несколько разных способов, которые я нашел, используя этот метод, мы можем переопределить встроенный стиль метки 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>

Это я просто редактирую ContentTemplate Label. По сути, это возможно для Label, потому что Label происходит от ContentControl, тогда как TextBlock живет в пространстве имен System.Windows.Controls, это не элемент управления. Он получен непосредственно из FrameworkElement. TextBlock используются во многих других элементах управления для отображения текстов, в том числе в Label.

Class Hierarchy for the 2 elements

Обратитесь к этой статье, чтобы узнать больше об этом

1
TheLastStark 11 Июн 2019 в 12:35

Вы должны изменить имя свойства в сеттере

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

0
Sung Jakob 30 Май 2019 в 06:27