我创建了以下控件:第一个这就是它的样子:
我想添加一个Select all复选框。我希望它看起来像这样:
dwbf0jvd1#
最明显的解决方案是只使用StackPanel,在ItemsControl之前添加CheckBox。在这种情况下,该项目不属于ItemsControl。是否可以接受取决于您的要求。
StackPanel
ItemsControl
CheckBox
<StackPanel> <StackPanel.Resources> <CollectionViewSource x:Key="UsersKey" IsLiveFilteringRequested="True" Source="{Binding StringItems}"/> </StackPanel.Resources> <StackPanel Orientation="Horizontal"> <CheckBox Content="Select all"/> </StackPanel> <ItemsControl x:Name="ItemsControlUsers"> <!-- ...other markup. --> </ItemsControl> </StackPanel>
另一个解决方案是使用CompositeCollection,它允许绑定多个集合,也允许添加单个元素。所有的项都是ItemsControl的一部分。
CompositeCollection
<Border> <Border.Resources> <CollectionViewSource x:Key="UsersKey" IsLiveFilteringRequested="True" Source="{Binding Users}"/> </Border.Resources> <ItemsControl x:Name="ItemsControlUsers"> <ItemsControl.ItemsSource> <CompositeCollection> <StackPanel Orientation="Horizontal"> <CheckBox Content="Select all"/> </StackPanel> <CollectionContainer Collection="{Binding Source={StaticResource UsersKey}}"/> </CompositeCollection> </ItemsControl.ItemsSource> <ItemsControl.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <CheckBox IsChecked="{Binding IsSelected}" Checked="CheckBox_OnChecked" Unchecked="CheckBox_OnUnchecked" Content="{Binding Name}"/> </StackPanel> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </Border>
1条答案
按热度按时间dwbf0jvd1#
最明显的解决方案是只使用
StackPanel
,在ItemsControl
之前添加CheckBox
。在这种情况下,该项目不属于ItemsControl
。是否可以接受取决于您的要求。另一个解决方案是使用
CompositeCollection
,它允许绑定多个集合,也允许添加单个元素。所有的项都是ItemsControl
的一部分。