XAML 具有全选功能的筛选控件

yhuiod9q  于 2022-12-07  发布在  其他
关注(0)|答案(1)|浏览(107)

我创建了以下控件:
第一个
这就是它的样子:

我想添加一个Select all复选框。
我希望它看起来像这样:

dwbf0jvd

dwbf0jvd1#

最明显的解决方案是只使用StackPanel,在ItemsControl之前添加CheckBox。在这种情况下,该项目不属于ItemsControl。是否可以接受取决于您的要求。

<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的一部分。

<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>

相关问题