如何使复选框以正常方式显示(白色背景)?

时间:2013-07-30 07:26:55

标签: .net wpf

我有一个WPF表单,其复选框定义如下:

<Views:MyView Background="{DynamicResource MainBackground}">
    ...
    <Style TargetType="{x:Type CheckBox}" BasedOn="{StaticResource {x:Static ResourceKeys:Switch.YesNoStyle}}">
        ...
    </Style>
    ...
    <CheckBox Grid.Column="0" 
        IsEnabled="False"  
        Checked="ToggleButton_OnChecked" 
        VerticalAlignment="Center" 
        Style="{x:Null}" 
        IsChecked="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType=ListViewItem},Mode=TwoWay}" />
    ...
</Views:MyView>

有一个问题 - 它以灰色背景显示(即使是活动的),这会让用户感到困惑:

未选中复选框:Unchecked check box with gray background

选中复选框:Checked check box with gray background

我希望背景为白色。

问题的可能原因是

  1. 样式<Style TargetType="{x:Type CheckBox}"
  2. 顶级容器的背景设置(Background="{DynamicResource MainBackground}")。
  3. 我试过

    1. CheckBox
    2. 添加名称
    3. 为该名称创建新样式。
    4. 这导致下面显示的代码并没有帮助。

      <Views:MyView Background="{DynamicResource MainBackground}">
          ...
          <Style TargetType="{x:Type CheckBox}" BasedOn="{StaticResource {x:Static ResourceKeys:Switch.YesNoStyle}}">
              ...
          </Style>
          <Style TargetType="{x:Type CheckBox}" x:Name="MyCheckBox" BasedOn="{StaticResource {x:Type CheckBox}}">
              <Setter Property="Background" Value="White"/>
          </Style>
      
          ...
          <CheckBox 
              Name="MyCheckBox"
              Grid.Column="0" 
              IsEnabled="False"  
              Checked="ToggleButton_OnChecked" 
              VerticalAlignment="Center" 
              Style="{x:Null}" 
              IsChecked="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType=ListViewItem},Mode=TwoWay}" />
          ...
      </Views:MyView>
      

      如何将该特定复选框的背景更改为白色(以便它看起来像任何其他活动复选框)?

1 个答案:

答案 0 :(得分:1)

由于控件的禁用状态,可能会设置此情况下的背景颜色。您可以尝试删除 IsEnabled =“false”并使用类似HitTest的内容:

<CheckBox IsHitTestVisible="False" 
          VerticalAlignment="Center" 
          Style="{x:Null}" />

通过这种方式,控件不会处理任何用户输入,因此它类似于禁用但具有正常样式。

修改

要使用您定义的样式,您必须为其指定一个键并在复选框上使用它:

<Style TargetType="{x:Type CheckBox}" 
       BasedOn="{StaticResource {x:Type CheckBox}}"
       x:Key="WhiteCheckBox">
     <Setter Property="Background" Value="White"/>
</Style>

<CheckBox VerticalAlignment="Center" 
          Style="{StaticResource WhiteCheckBox}" />