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

标签 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 为 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>

最佳答案

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

样式中的触发器看起来不错,但有些样式会忽略主题渲染的背景等属性,因此在触发器中设置这些属性没有任何作用。

另一个可能的原因是 dependency property value precedence 的概念。 - 当“本地”设置值时,该值会覆盖样式中给出的值(即使通过触发器设置)。所以如果你的 <RadioButton>标签有一个背景设置,触发器什么也不做。

关于wpf - 将按钮切换为单选按钮样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3736744/

相关文章:

c# - WPF 将文件从 Windows 资源管理器拖放到 TreeView

wpf - 任务栏上的新实例中键单击/shift+单击

c# - 这是实现 MVVM 的正确方法吗?

c# - Wpf 应用程序——如何保存和加载应用程序所在的屏幕

wpf - 更改标签的行为以支持在 WPF 中通过单击进行切换

c# - WPF:同步 ItemsControl 中所有项目的宽度

.net - 确定是什么阻塞了 UI 线程

c# - 如何将组框锚定到左侧但允许组框在拉伸(stretch)时增长到最大宽度

c# - 寻找 WPF 的对象图 TreeView 控件

c# - 如何在wpf中使按钮和背景闪烁