将ListBoxItem IsSelected触发器传播给子控件

时间:2019-04-23 21:34:17

标签: c# wpf checkbox listbox custom-controls

我正在开发具有可移动ListBoxItem的CheckedListBox。问题在于,只有在用户单击CheckBox区域时,项目才会被检查,这有点尴尬。

如何创建ListBoxItem触发器(IsSelected)来检查“ DataSourced” ListBox上的复选框?例如:

enter image description here

下面是我的控件(为简洁起见,所有其他代码都被省略了):

<ListBox x:Name="executors" ItemsSource="{Binding Executors}" HorizontalAlignment="Left" Height="121" Margin="23,19,0,0" VerticalAlignment="Top" Width="362">
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="Height" Value="30" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBoxItem">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition />
                                <ColumnDefinition Width="30" />
                            </Grid.ColumnDefinitions>
                            <CheckBox Margin="4,8" IsChecked="{Binding Enabled}">
                                <ContentPresenter Content="{Binding Description}">

                                </ContentPresenter>
                            </CheckBox>
                            <Button Command="{Binding DataContext.RemoveExecutorCommand, ElementName=executors}" CommandParameter="{Binding}" Background="White" Height="22" Width="22" Grid.Column="1">
                                <Image Source="trash.png" Stretch="Fill" Width="14" Height="14" />
                            </Button>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>

执行者是ObservableCollection的{​​{1}},其中有ExecutorEnabled作为成员。

1 个答案:

答案 0 :(得分:0)

对于那些遇到相同问题的人,请参考以下代码,以供参考。我在任何地方都找不到任何工作示例,因此这可能很有用。

这里的主要思想是将选择事件传播到CheckBox,这听起来工作量太大,或者只是扩展CheckBox选择区域以适合{{1} }。

以下是如何实现第二种选择的示例:

ListBoxItem

这应该产生以下内容:

enter image description here