Переключить кнопку как стиль радио кнопки - PullRequest
6 голосов
/ 17 сентября 2010

Я хотел сгруппировать несколько кнопок переключения и заставить их вести себя как переключатели. Поэтому я добавил радио-кнопки в свой xaml и создал следующий стиль:

<Style BasedOn="{StaticResource {x:Type ToggleButton}}" TargetType="RadioButton">
  <Setter Property="FontFamily" Value="Arial"/>
  <Setter Property="FontSize" Value="12"/>
  <Setter Property="Foreground" Value="White"/>
  <Style.Triggers>
    <Trigger Property="IsChecked" Value="True">
      <Setter Property="Background" Value="Red"/>
    </Trigger>
  </Style.Triggers>
</Style>

Теперь переключатели выглядят как кнопки переключения, и применяются свойства шрифта и переднего плана стиля, но если я нажму одну из кнопок переключения, фон не изменится на красный. Если я изменяю передний план на основе IsChecked, он работает, но я не могу заставить фон измениться, когда IsChecked имеет значение true.

Есть идеи?

UPDATE:

Похоже, что стиль ToggleButton по умолчанию не использует свойство Background. Я использую код ниже, чтобы решить мою проблему. Если кто-то видит что-то не так с приведенным ниже, пожалуйста, дайте мне знать.

<DataTemplate x:Key="RedBackground">
      <Grid Background="Red">
        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" TextAlignment="Center" Text="{Binding}"/>
      </Grid>
    </DataTemplate>

    <Style TargetType="ToggleButton">
      <Style.Triggers>
        <Trigger Property="IsChecked" Value="True">
          <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
          <Setter Property="VerticalContentAlignment" Value="Stretch"/>
          <Setter Property="ContentTemplate" Value="{StaticResource RedBackground}"/>
        </Trigger>
      </Style.Triggers>
    </Style>

1 Ответ

4 голосов
/ 17 сентября 2010

Использует ли стиль, на котором вы основываете, свойство Background, если только оно не установлено "пользователем"? То есть, вы можете использовать стиль для кнопки переключения до этой точки и явно установить фон для красного, чтобы получить желаемый эффект?

Триггер в стиле выглядит нормально, но некоторые стили игнорируют свойства, такие как Background для тематического рендеринга, поэтому установка этих свойств в триггере ничего не делает.

Другой возможной причиной является понятие приоритета значения свойства зависимости - когда значение задается «локально», оно переопределяет значение, заданное в стиле (даже если установлено через триггер). Поэтому, если у вашего тега <RadioButton> задан фон, триггер ничего не сделает.

...