0

我有一个 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>

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

未选中的复选框:灰色背景未选中的复选框

选中的复选框:带有灰色背景的选中复选框

我希望背景是白色的。

问题的可能原因是

  1. 风格<Style TargetType="{x:Type CheckBox}"
  2. 顶级容器的背景设置(Background="{DynamicResource MainBackground}")。

我尝试过了

  1. CheckBox给and添加一个名字
  2. 为该名称创建新样式。

这导致下面显示的代码并没有帮助。

<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>

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

4

1 回答 1

1

在这种情况下,背景颜色可能是由于控件的禁用状态而设置的。您可以尝试删除IsEnabled="false"并使用 HitTest 之类的东西:

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

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

编辑

为了使用您定义的样式,您必须给它一个 Key 并在复选框上使用它:

<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}" />
于 2013-07-30T07:47:30.293 回答