【问题标题】:Material Design (WPF): Remove CheckBox BackgroundMaterial Design (WPF):删除复选框背景
【发布时间】:2020-10-28 18:54:18
【问题描述】:
我试图仅在选中 CheckBox 时显示正方形和复选标记。
我的代码如下:
<CheckBox Content="Teste">
<CheckBox.Resources>
<SolidColorBrush x:Key="MaterialDesignCheckBoxOff" Color="White"/>
<SolidColorBrush x:Key="PrimaryHueMidBrush" Color="Transparent"/>
</CheckBox.Resources>
</CheckBox>
但是,它不起作用,当移除背景时,启用标记消失。
我想如何离开我的CheckBox:
【问题讨论】:
标签:
c#
wpf
xaml
controltemplate
【解决方案1】:
这看起来是一件容易的事,但事实并非如此。 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,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3M19,5V19H5V5H19Z"
Fill="{DynamicResource MaterialDesignCheckBoxOff}" />
-
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,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z" />
<Setter Property="Fill" TargetName="Graphic" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background}" />
</Trigger>
如您所见,更改MaterialDesignCheckBoxOff 画笔并没有按预期工作,因为复选标记不是具有单独颜色的单独元素。
如果您想更改此设置,您必须调整可在in the GitHub repository 找到的控制模板。您必须复制默认模板和样式以创建单独的复选标记和背景路径并相应地设置它们的颜色。之后,您会将这些样式包含在资源字典中并将它们用作命名资源或创建隐式样式并覆盖 MaterialDesign 为CheckBox 提供的样式。