【发布时间】:2020-03-26 10:26:56
【问题描述】:
我已经实现了自定义 ComboBox 控件,哪些集合项具有组。有组标题和以下组项。它看起来像这样:
<Style TargetType="{x:Type GroupItem}" x:Key="ComboBoxNoGroupHeaderStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<ItemsPresenter/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type GroupItem}" x:Key="ComboBoxDefaultGroupHeaderStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<ContentPresenter Grid.Row="0" />
<ItemsPresenter Grid.Row="1" Margin="20,0,0,0" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<ppstd:ComboBoxHeaderStyleSelector x:Key="ComboBoxGroupStyleSelector"
ComboBoxNoGroupHeaderStyle="{StaticResource ComboBoxNoGroupHeaderStyle}"
ComboBoxDefaultGroupHeaderStyle="{StaticResource ComboBoxDefaultGroupHeaderStyle}"/>
<DataTemplate x:Key="ComboBoxGroupHeaderTemplate">
<CheckBox Content="{Binding Name}"
FontWeight="Bold">
//IsChecked={Binding IsHeaderCheckboxChecked}" tried this but DataContext is type of GroupItem, which has eg. Name property among others
</CheckBox>
</DataTemplate>
<ComboBox >
<ComboBox.GroupStyle >
<GroupStyle
ContainerStyleSelector = "{StaticResource ComboBoxGroupStyleSelector}"
HeaderTemplate = "{StaticResource ComboBoxGroupHeaderTemplate}" / >
</ComboBox.GroupStyle >
</ComboBox>
它看起来很棒,但它缺少一个功能:通过选中组标题复选框来选择组项目。我认为这可以通过将IsChecked 属性添加到ComboBoxGroupHeaderTemplate DataTemplate 来完成,然后在设置此属性时实现此功能,但这并不像我想象的那么简单。老实说,我现在被卡住了,不知道如何走得更远。
我听说过Behaviors,但我从未使用过它,我不知道这是实现它的好方法。
问题是:有可能实现吗?如果是,如何?任何想法都会有所帮助。
【问题讨论】: