Стиль переопределения WPF из триггера стиля - PullRequest
0 голосов
/ 31 августа 2018

У меня есть Radiobutton, у которого есть набор стилей, чтобы он отображался как ToggleButton, и я хочу установить его цвет фона по умолчанию на зеленый, но когда он активен / отмечен, я хочу, чтобы он менял цвет. В моем примере ниже я бы хотел, чтобы он был синим. Неважно, что я пытаюсь сделать, зеленый цвет никогда не переопределится Чего мне не хватает?

Кнопка:

<RadioButton GroupName="Rating" Background="Green" Style="{StaticResource RatingToggleButtons}" x:Name="Normal" Content="Normal" Grid.Row="0" />

Style:

        <Style x:Key="RatingToggleButtons" TargetType="{x:Type ToggleButton}" BasedOn="{StaticResource MahApps.Metro.Styles.MetroToggleButton}">
        <Setter Property="Margin" Value="5 5 5 5" />
        <Setter Property="MinWidth" Value="100"/>
        <Setter Property="MinHeight" Value="50"/>
        <Style.Triggers>
            <Trigger Property="IsChecked" Value="True">
                <Setter Property="Background" Value="Blue"/>
                <Setter Property="Foreground" Value="White"/>
            </Trigger>
        </Style.Triggers>            
    </Style>

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Чего мне не хватает?

Тот факт, что локальные значения имеют приоритет над значениями, установленными стилями: https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/dependency-property-value-precedence

Таким образом, вместо установки локального значения, такого как:

<RadioButton ... Background="Green" ... />

... вы должны определить значение по умолчанию в Style:

<Style TargetType="{x:Type ToggleButton}">
    <Setter Property="Background" Value="Green"/>
    <Setter Property="Margin" Value="5 5 5 5" />
    <Setter Property="MinWidth" Value="100"/>
    <Setter Property="MinHeight" Value="50"/>
    <Style.Triggers>
        <Trigger Property="IsChecked" Value="True">
            <Setter Property="Background" Value="Blue"/>
            <Setter Property="Foreground" Value="White"/>
        </Trigger>
    </Style.Triggers>
</Style>

... и снова избегайте установки свойства Background элемента RadioButton:

<RadioButton GroupName="Rating" Style="{StaticResource RatingToggleButtons}" x:Name="Normal" Content="Normal" Grid.Row="0" />
0 голосов
/ 31 августа 2018

Короче говоря, фон, примененный с помощью шаблона элемента управления, имеет преимущество, по сравнению с фоном, установленным с помощью стиля (ваш случай). Поэтому вам необходимо отредактировать шаблон элемента управления.

  <RadioButton.Template>
        <ControlTemplate TargetType="{x:Type ButtonBase}">
            <ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
            <ControlTemplate.Triggers>

                <Trigger Property="IsChecked" Value="True">
                    <Setter Property="Background" TValue="#FF838383"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </RadioButton.Template>

примечание: код не проверен

См .: http://www.diranieh.com/NET_WPF/Properties.htm

...