隧道 Dockpanel 鼠标按下事件到 WPF 中的复选框

Tunnel Dockpanel Mousedown Event To Checkbox in WPF

在我的 WPF 应用程序中,我有很多由复选框和标签组成的 DockPanel。我想让应用程序处理 DockPanel 的 mousedown 事件,就像单击复选框一样,即用户不必专门单击复选框;他还可以单击标签以 check/uncheck 复选框。 我添加了一个 Eventhandler "DockPanel_MouseDown",它只是翻转了复选框的 IsChecked 属性,这很有效。 我的问题是我有很多这样的 DockPanel,我不想给每个复选框和每个 dockpanel 一个名字并编写数百个基本上做同样事情的事件处理程序。 有没有办法将该行为放入样式或模板中? C

为什么要使用单独的标签来选中和取消选中复选框?

Use this Alternative solution

<StackPanel> <CheckBox IsChecked="{Binding IsChecked, ElementName=checkbox}" Content="Hello"> <CheckBox.Template> <ControlTemplate TargetType="CheckBox"> <ContentPresenter/> </ControlTemplate> </CheckBox.Template> </CheckBox> <CheckBox x:Name="checkbox" Content="Normal checkbox"/> </StackPanel>

您实际上不必为每个停靠面板命名它们或事件处理程序。

您可以对所有这些停靠面板使用相同的事件处理程序,并且在您的事件处理程序中,您可以使用发件人而不是姓名。

<StackPanel Orientation="Vertical">
        <DockPanel Tag="false" MouseUp="DockPanel_OnMouseUp">
            <CheckBox DockPanel.Dock="Left" IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DockPanel}}, Path=Tag, Mode=TwoWay}"/>
            <Label DockPanel.Dock="Right" Content="CheckBox1" />
        </DockPanel>
        <DockPanel Tag="false" MouseUp="DockPanel_OnMouseUp">
            <CheckBox DockPanel.Dock="Left" IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DockPanel}}, Path=Tag, Mode=TwoWay}"/>
            <Label DockPanel.Dock="Right" Content="CheckBox1"/>
        </DockPanel>
        <DockPanel Tag="false" MouseUp="DockPanel_OnMouseUp">
            <CheckBox DockPanel.Dock="Left" IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DockPanel}}, Path=Tag, Mode=TwoWay}"/>
            <Label DockPanel.Dock="Right" Content="CheckBox1"/>
        </DockPanel>
        <DockPanel Tag="false" MouseUp="DockPanel_OnMouseUp">
            <CheckBox DockPanel.Dock="Left" IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DockPanel}}, Path=Tag, Mode=TwoWay}"/>
            <Label DockPanel.Dock="Right" Content="CheckBox1"/>
        </DockPanel>
    </StackPanel>

代码:

private void DockPanel_OnMouseUp(object sender, MouseButtonEventArgs e)
    {
        var dockPanel = (DockPanel) sender;
        dockPanel.Tag = !dockPanel.Tag.ToString().ToLower().Equals("true");
    }