<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(&quot;PART_TextBlock&quot;) 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>
WPF 复选框点击文字选中内容:自定义控件实现

原文地址: https://www.cveoy.top/t/topic/na3W 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录