WPF 复选框点击文字选中内容:自定义控件实现
<p>要实现 WPF 复选框点击文字选中功能,可以使用以下方法:</p>
<ol>
<li>创建自定义复选框控件,继承系统自带的复选框控件 CheckBox。</li>
<li>在控件模板中添加一个 TextBlock,用于显示复选框文字。</li>
<li>重写 OnMouseLeftButtonUp 方法,在方法中判断鼠标点击位置是否在 TextBlock 内,如果是,则改变复选框的选中状态。</li>
</ol>
<p>下面是一个示例代码:</p>
<pre><code class="xml"><Style TargetType="{x:Type local:MyCheckBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MyCheckBox}">
<Grid>
<CheckBox x:Name="PART_CheckBox"
IsChecked="{TemplateBinding IsChecked}"
Content="{TemplateBinding Content}"
Margin="0,0,5,0"/>
<TextBlock x:Name="PART_TextBlock"
Text="{TemplateBinding Content}"
VerticalAlignment="Center"
Margin="20,0,0,0"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="PART_TextBlock" Property="Foreground" Value="Red"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style></code></pre>
<pre><code class="csharp">public class MyCheckBox : CheckBox
{
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
<pre><code> var textBlock = GetTemplateChild("PART_TextBlock") as TextBlock;
if (textBlock != null)
{
textBlock.MouseLeftButtonUp += TextBlock_MouseLeftButtonUp;
}
}
private void TextBlock_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
IsChecked = !IsChecked;
}
</code></pre>
<p>}</code></pre></p>
<p>在使用该自定义复选框控件时,只需要将原来的 CheckBox 替换成 MyCheckBox 即可:</p>
<pre><code class="xml"><local:MyCheckBox Content="选项1"/></code></pre>
原文地址: https://www.cveoy.top/t/topic/na3W 著作权归作者所有。请勿转载和采集!