我需要在ListBoxItems中的项之间加入一个分隔符 我的商品来源中的某些商品将放置在分隔符下方,而某些商品位于其上方。
例如:
以上是通过改变ListBox的ControlTemplate来完成的:
<ScrollViewer>
<StackPanel>
<ItemsPresenter />
<Separator BorderBrush="Red" />
<ListBoxItem Content=".." ContentTemplate="..." x:Key="helpItem"/>
</StackPanel>
</ScrollViewer>
问题是“helpItem”没有被选中,因为它不属于我的ItemsSource。
现在能够选择它就足够了
1)所以我的第一个问题是如何将此项目与我的ItemsSource关联或者 让它可选?
将来我可能不会有更多可放置的物品 列表框的下半部分
2)我如何将分隔符放置在我的物品之间的给定位置,就像分开我的物品一样 ItemsPresenter在一个合理的位置?
答案 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;
}
}
我想要CollA
和CollB
之间的分隔符,然后我的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>
应该产生:
现在项目正常运行,您可以将SelectedItem
绑定并根据需要使用它,并通过针对源集合检查SelectedItem,您可以检测当前所选项目所属的源列表。< / p>