Wpf 在复选框交互时选择父ListBoxItem

Wpf 在复选框交互时选择父ListBoxItem,wpf,wpf-controls,Wpf,Wpf Controls,不过问题很简单。我有一个WPF应用程序(.NET 4.0)。有一个列表框,其中包含许多用户面板。每个用户面板都包含一个复选框 运行时,您可以单击userpanel的任何部分(复选框本身除外),listbox将选择该行(在这个简单的例子中,背景变化会直观地指示该行)。如果选中该复选框,则不会选择该行 要求: 如果选中该复选框,这应视为选择行 复选框控件: <UserControl x:Class="CheckboxClickExample.CheckboxControl"

不过问题很简单。我有一个WPF应用程序(.NET 4.0)。有一个列表框,其中包含许多用户面板。每个用户面板都包含一个复选框

运行时,您可以单击userpanel的任何部分(复选框本身除外),listbox将选择该行(在这个简单的例子中,背景变化会直观地指示该行)。如果选中该复选框,则不会选择该行

要求: 如果选中该复选框,这应视为选择行

复选框控件:

<UserControl x:Class="CheckboxClickExample.CheckboxControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="189" d:DesignWidth="221">
    <Grid>
        <CheckBox Content="CheckBox" Height="16" HorizontalAlignment="Left" Margin="10,10,0,0" Name="checkBox1" VerticalAlignment="Top" />
    </Grid>
</UserControl>

主窗口:

<Window x:Class="CheckboxClickExample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:checkboxsample="clr-namespace:CheckboxClickExample"
        Title="MainWindow" Height="350" Width="525">
    <ListBox>        
        <checkboxsample:CheckboxControl/>
        <checkboxsample:CheckboxControl/>
        <checkboxsample:CheckboxControl/>
        <checkboxsample:CheckboxControl/>
    </ListBox>
</Window>

您可以在
用户控件中处理此问题
代码隐藏:

    private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
    {
        var parent = sender as DependencyObject;

        while (parent != null)
        {
            if (parent is Selector)
                break;

            parent = VisualTreeHelper.GetParent(parent);
        }

        if (parent != null)
            ((Selector) parent).SelectedItem = this;
    }
然后使用
复选框中的处理程序:

<CheckBox Content="CheckBox"
          Height="16"
          Click="ButtonBase_OnClick"
          HorizontalAlignment="Left"
          Margin="10,10,0,0"
          VerticalAlignment="Top" />
然后,您可以在XAML中使用它,只需设置
EnableSelectionOnClick
dependency属性:

<CheckBox Content="CheckBox"
          Height="16"
          l:ButtonClickHelper.EnableSelectionOnClick="True"
          HorizontalAlignment="Left"
          Margin="10,10,0,0"
          VerticalAlignment="Top" />

希望这有帮助

<CheckBox Content="CheckBox"
          Height="16"
          l:ButtonClickHelper.EnableSelectionOnClick="True"
          HorizontalAlignment="Left"
          Margin="10,10,0,0"
          VerticalAlignment="Top" />