材质设计WPF:删除复选框背景

问题描述

我试图仅在选中CheckBox显示正方形和选中标记

我的代码如下:

<CheckBox Content="Teste">
     <CheckBox.Resources>
           <SolidColorBrush x:Key="MaterialDesignCheckBoxOff" Color="White"/>
           <SolidColorBrush x:Key="PrimaryHueMidBrush" Color="Transparent"/>
     </CheckBox.Resources>
</CheckBox>

但是,它不起作用,当删除背景时,启用标记会消失。

我想如何离开CheckBox图片

Image of how the CheckBox should look

解决方法

这看起来很容易,但事实并非如此。 MaterialDesign中CheckBox的默认模板使用Path绘制框和复选标记。实际上,它重用了相同的Path,但只更改了其Data属性。

  • Path的定义为normal state(只是空白框)

    <Path x:Name="Graphic"
          Data="M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,0 21,19V5C21,3.89 20.1,3 19,3M19,5V19H5V5H19Z" 
          Fill="{DynamicResource MaterialDesignCheckBoxOff}" />
    

    Example of the empty check box

  • 例如,checked trigger更改了Data属性以显示一个填充框。您所看到的实际上是绘制的填充框,而其中的对号完全没有填充,这是一个空白。

    <Trigger Property="IsChecked" Value="true">
       <Setter Property="Data" TargetName="Graphic" Value="M10,17L5,12L6.41,10.58L10,14.17L17.59,6.58L19,8M19,3Z" />
       <Setter Property="Fill" TargetName="Graphic" Value="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Background}" />
    </Trigger>
    

    Example of checked check box

如您所见,更改MaterialDesignCheckBoxOff笔刷无法按预期工作,因为复选标记不是具有单独颜色的单独元素。

如果要更改此设置,则必须调整in the GitHub repository上的控制模板。您将必须复制默认模板和样式以创建单独的复选标记和背景路径,并相应地设置其颜色。之后,您可以将这些样式包含在资源字典中,并将它们用作命名资源或创建隐式样式,并覆盖 MaterialDesign CheckBox提供的样式。