style定义如下:
<Style x:Key="NoBorderCheckBoxStyle" TargetType="{x:Type CheckBox}">
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type CheckBox}">
<Border>
<Grid>
<ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" />
<Border>
<Border.Background>
<VisualBrush Opacity="1.0" Stretch="None">
<VisualBrush.Visual>
<Path Name="path" Opacity="0.1"
Data="M 0 5 L 3 10 10 0"
StrokeThickness="1.5" />
</VisualBrush.Visual>
</VisualBrush>
</Border.Background>
</Border>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter TargetName="path" Property="Opacity" Value="1.0" />
<Setter TargetName="path" Property="Stroke" Value="#FF70A16F" />
<Setter TargetName="path" Property="StrokeThickness" Value="2.5" />
</Trigger>
<Trigger Property="IsChecked" Value="False">
<Setter TargetName="path" Property="StrokeThickness" Value="0" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
然后,如果给一个CheckBox应用此风格定义:
<CheckBox Style="{StaticResource NoBorderCheckBoxStyle}"
IsChecked="True"
Width="16" Height="16" />
运行效果如下图所示:
已知的BUG:
- 应用此风格后,不能再给CheckBox设置Content属性,否则Content和“对勾”会重叠在一起。
- 在没有应用此风格时,如果不给CheckBox设置Width和Height属性,它会取默认大小。但应用此风格后必须显示地设置Width和Height属性。