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

6

我想将一些切换按钮分组并使它们的行为像单选按钮。所以我在我的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时,我无法使背景发生变化。
有什么想法吗?
更新:
似乎默认的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>

如果你在 RadioButton 上显式设置 BackgroundRed,它会真正起作用吗? - Kent Boogaart
是的。在单选按钮本身上设置Background="Red"会显示一个带有红色背景的切换按钮。 - Flack
1个回答

4

除非被用户设置,否则您所基于的样式是否使用Background属性?也就是说,您可以使用该样式切换按钮并将背景明确设置为红色以获得所需效果吗?

样式中的触发器看起来不错,但某些样式会忽略诸如主题渲染之类的属性,因此在触发器中设置这些属性无效。

另一个可能的原因是依赖属性值优先级的概念 - 当“本地”设置了值时,该值将覆盖样式中给出的值(即使通过触发器设置)。因此,如果您的<RadioButton>标记已经设置了背景,则触发器将不起作用。


嗨,菲利普。我又做了一些搜索,似乎你是正确的。我所依据的样式不使用Background属性。我更新了我的问题,并提供了一个解决方案。感谢你的帮助。 - Flack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接