【问题标题】:Toggle button as Radio button style切换按钮为单选按钮样式
【发布时间】:2010-09-17 15:33:52
【问题描述】:

我想将多个切换按钮组合在一起,并让它们充当单选按钮。所以我所做的就是在我的 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 上明确将Background 设置为Red,它真的有效吗?
  • 是的。在单选按钮上设置 Background="Red" 会显示一个带有红色背景的切换按钮。

标签: wpf wpf-controls


【解决方案1】:

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

样式中的触发器看起来不错,但是某些样式忽略了诸如背景等属性以进行主题渲染,因此在触发器中设置这些属性不会执行任何操作。

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

【讨论】:

  • 嘿菲利普。我做了更多搜索,看来您是正确的。我所基于的样式不使用 Background 属性。我用我找到的解决方案更新了我的问题。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-17
  • 1970-01-01
相关资源
最近更新 更多