无需修改全局样式 自定义单个Material Design风格CheckBox的选中符号
可行实现方案
- 方案1:继承原有样式添加内联触发器(最推荐,无侵入,仅作用于当前控件)
直接基于现有MaterialDesign全局样式派生局部样式,通过触发器控制选中状态的显示内容,不需要修改全局样式定义,代码如下:
<CheckBox x:Name="inactivity_cb" Content="X" Click="cb_Click"> <CheckBox.Style> <Style TargetType="CheckBox" BasedOn="{StaticResource MaterialDesignActionDarkCheckBox}"> <Style.Triggers> <Trigger Property="IsChecked" Value="True"> <!-- 替换Value为你需要的自定义选中符号即可 --> <Setter Property="Content" Value="☑" /> </Trigger> <Trigger Property="IsChecked" Value="False"> <Setter Property="Content" Value="X" /> </Trigger> </Style.Triggers> </Style> </CheckBox.Style> </CheckBox>
如果后续需要给多个CheckBox复用这个自定义规则,把上面的Style抽离到页面/应用的Resources资源字典中,指定x:Key后单独引用即可。
- 方案2:后台事件控制实现
如果你更倾向于用代码逻辑控制,可以绑定选中/取消选中事件动态修改Content,适合需要结合业务逻辑动态切换显示符号的场景:
XAML代码:
<CheckBox x:Name="inactivity_cb" Content="X" Style="{StaticResource MaterialDesignActionDarkCheckBox}" Click="cb_Click" Checked="inactivity_cb_Checked" Unchecked="inactivity_cb_Unchecked"/>
对应的C#后台代码:
private void inactivity_cb_Checked(object sender, RoutedEventArgs e) { inactivity_cb.Content = "☑"; // 替换为自定义选中符号 } private void inactivity_cb_Unchecked(object sender, RoutedEventArgs e) { inactivity_cb.Content = "X"; }
- 方案3:重写局部控件模板
如果除了符号之外你还需要修改选中状态的其他样式(比如颜色、大小),可以重写当前CheckBox的控件模板,同样基于原有MaterialDesign样式继承,仅修改选中状态的对应配置即可,不会影响全局样式。
内容的提问来源于stack exchange,提问作者MarkKoli
相关产品推荐
相关产品推荐

