在列表框中合并分隔符

era*_*zap 7 wpf listbox listboxitem

我需要在ListBoxItems中的项目之间加入一个分隔符,例如,我的项目源中的某些项目将放置在分隔符下方,而某些项目位于分隔符下方.

例如 :

listboxwithaeparator

以上是通过更改ListBox的ControlTemplate来完成的:

 <ScrollViewer>
     <StackPanel>
         <ItemsPresenter />                                        
         <Separator  BorderBrush="Red"  />
         <ListBoxItem Content=".." ContentTemplate="..."  x:Key="helpItem"/>                                    
     </StackPanel>
 </ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

问题是"helpItem"没有被选中,因为它不是我的ItemsSource的一部分.

现在可以选择它就足够了

1)所以我的第一个问题是如何将这个项目与我的ItemsSource相关联,或者让它可以选择?

未来还有更多,我可能不会有更多的项目放在我的列表框的下半部分

2)我如何将分隔符放置在我的项目之间的给定位置,就像将我的ItemsPresenter划分为逻辑位置一样?

Viv*_*Viv 8

而不是多个的ListBox控制,如果你能分裂你收集到"n"的基础上有多少分隔符的需要,你可以把它们放在一起通过一个较小的群体CompositeCollection在同一ListBox

所以例如说我有:

public partial class MainWindow : Window {
  public List<string> CollA { get; set; }
  public List<string> CollB { get; set; }
  public MainWindow() {
    InitializeComponent();

    CollA = new List<string> {"A", "B", "C"};

    CollB = new List<string> {"D", "E", "F"};

    DataContext = this;
  }
}
Run Code Online (Sandbox Code Playgroud)

我想之间的分隔符CollACollB,然后我的XAML可以是:

<ListBox>
  <ListBox.Resources>
    <CollectionViewSource x:Key="CollectionOne"
                          Source="{Binding CollA}" />
    <CollectionViewSource x:Key="CollectionTwo"
                          Source="{Binding CollB}" />
  </ListBox.Resources>
  <ListBox.ItemsSource>
    <CompositeCollection>
      <CollectionContainer Collection="{Binding Source={StaticResource CollectionOne}}" />
      <ListBoxItem HorizontalContentAlignment="Stretch"
                    IsEnabled="False"
                    IsHitTestVisible="False">
        <Rectangle Height="2"
                    Fill="Gray" />
      </ListBoxItem>
      <CollectionContainer Collection="{Binding Source={StaticResource CollectionTwo}}" />
    </CompositeCollection>
  </ListBox.ItemsSource>
</ListBox>
Run Code Online (Sandbox Code Playgroud)

应该产生:

在此输入图像描述

现在项目是可用的,您可以根据需要绑定SelectedItem输出并使用它,并且通过针对源集合检查SelectedItem,您可以检测当前所选项目所属的源列表.