在 WPF 中双击时切换复选框状态

Toggle the checkbox status when double click in WPF

在 WPF 中创建了一个简单的复选框。 单击可切换 UI 中的复选框状态。 当我双击复选框文本时,我希望更改复选框状态。请用下面的代码帮助我。

xaml中唯一的控件:

<Grid>
    <CheckBox Content="CheckBox" HorizontalAlignment="Left" Height="60" Margin="144,93,0,0" VerticalAlignment="Top" Width="392"/>
</Grid>

如果您只想在双击时切换复选框状态,则只需创建一个 CheckBox_MouseDoubleClick 事件并将 IsChecked 属性 设置为 true。但请注意,此解决方案不在 MVVM 模式内。

我找不到标准 CheckBox 控件的解决方案。我通过 UserControl 创建了自己的复选框。

DoubleClickCheckBox.xaml(用户控件)

<Grid VerticalAlignment="Center" HorizontalAlignment="Center" Loaded="Grid_Loaded">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>
    <CheckBox Name="checkBox" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked"/>
    <TextBlock Name="textBlock" MouseDown="TextBlock_MouseDown" TextAlignment="Center" Grid.Column="1" Margin="4,0,4,0"/>
</Grid>

DoubleClickCheckBox.xaml.cs (用户控件)

public partial class DoubleClickCheckBox : UserControl
{
    public string Text { get; set; }

    public bool IsChecked { get; set; }

    public event EventHandler UserControlChecked;

    public event EventHandler UserControlUnChecked;

    public DoubleClickCheckBox()
    {
        InitializeComponent();
    }

    private void Grid_Loaded(object sender, RoutedEventArgs e)
    {
        this.checkBox.IsChecked = this.IsChecked;
        this.textBlock.Text = this.Text;
    }

    private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
    {
        if(e.ClickCount == 2)
            this.checkBox.IsChecked = !this.checkBox.IsChecked;
    }

    private void CheckBox_Checked(object sender, RoutedEventArgs e)
    {
        if (UserControlChecked != null)
            UserControlChecked(this, EventArgs.Empty);
    }

    private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
    {
        if (UserControlUnChecked != null)
            UserControlUnChecked(this, EventArgs.Empty);
    }
}

MainWindow.xaml

<Grid>
    <local:DoubleClickCheckBox VerticalAlignment="Center" HorizontalAlignment="Center" Background="Aqua" Text="Test" IsChecked="False" UserControlChecked="DoubleClickCheckBox_UserControlChecked" UserControlUnChecked="DoubleClickCheckBox_UserControlUnChecked"/>
</Grid>

MainWindow.xaml.cs

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void DoubleClickCheckBox_UserControlChecked(object sender, EventArgs e)
    {
        this.Title = "Checked";
    }

    private void DoubleClickCheckBox_UserControlUnChecked(object sender, EventArgs e)
    {
        this.Title = "UnChecked";
    }
}

您可以使用此样式自定义所有内容。我只定制了选中和未选中的事件。以后就看你了

编辑:正如post所有者所希望的那样,我再次启用了单击。 删除了 CheckBox_PreviewMouseButtonDown 事件。