在列表框中合并分隔符

时间:2013-08-21 07:42:54

标签: wpf listbox listboxitem

我需要在ListBoxItems中的项之间加入一个分隔符 我的商品来源中的某些商品将放置在分隔符下方,而某些商品位于其上方。

例如:

listboxwithaeparator

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

 <ScrollViewer>
     <StackPanel>
         <ItemsPresenter />                                        
         <Separator  BorderBrush="Red"  />
         <ListBoxItem Content=".." ContentTemplate="..."  x:Key="helpItem"/>                                    
     </StackPanel>
 </ScrollViewer>

问题是“helpItem”没有被选中,因为它不属于我的ItemsSource。

现在能够选择它就足够了

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

将来我可能不会有更多可放置的物品 列表框的下半部分

2)我如何将分隔符放置在我的物品之间的给定位置,就像分开我的物品一样   ItemsPresenter在一个合理的位置?

1 个答案:

答案 0 :(得分:8)

而不是多个ListBox控件,如果您可以根据所需的分隔符将您的集合拆分为“n”个较小的组,则可以通过CompositeCollection将它们全部放在同一个ListBox中{1}}

例如,我说:

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

我想要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>

应该产生:

enter image description here

现在项目正常运行,您可以将SelectedItem绑定并根据需要使用它,并通过针对源集合检查SelectedItem,您可以检测当前所选项目所属的源列表。< / p>