我有一个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>
有一个问题 - 它以灰色背景显示(即使是活动的),这会让用户感到困惑:
未选中复选框:
选中复选框:
我希望背景为白色。
问题的可能原因是
<Style TargetType="{x:Type CheckBox}"
或Background="{DynamicResource MainBackground}"
)。我试过
CheckBox
和这导致下面显示的代码并没有帮助。
<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>
如何将该特定复选框的背景更改为白色(以便它看起来像任何其他活动复选框)?
答案 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}" />