将按钮切换为单选按钮样式

时间:2010-09-17 15:33:53

标签: wpf wpf-controls

我想组合一些切换按钮,让它们像单选按钮一样。所以我做的是为我的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为真时我无法更改背景。

有什么想法吗?

更新

似乎默认的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 个答案:

答案 0 :(得分:4)

您所依据的样式是否完全使用Background属性,除非它是“按用户”设置的?也就是说,您可以使用样式切换到此点的按钮并将背景显式设置为红色以获得所需的效果吗?

样式中的触发器看起来很好,但有些样式忽略了主题渲染的背景等属性,因此在触发器中设置这些属性不会做任何事情。

另一个可能的原因是dependency property value precedence的概念 - 当一个值设置为“本地”时,该值将覆盖样式中给出的值(即使通过触发器设置)。因此,如果您的<RadioButton>标记设置了背景,则触发器将不执行任何操作。