2013-08-21 21 views
6

私のリストボックスアイテムのアイテム間にセパレータを組み込む必要があります。例えば、 アイテムソース内のいくつかのアイテムがセパレータの下に配置され、その上に配置されます。例えばリストボックスにセパレータを組み込む

listboxwithaeparator

上記のListBoxののControlTemplateを変更することによって行われます。

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

問題は、それがあるので、 "helpItem" が選択されないということです私のItemsSourceの一部ではありません。今では十分で選択することができるために

1)だから私は私のItemsSourceでこのアイテムを関連付けるまたは代わり はそれを選択可能にすることができるか、私の最初の質問は可能でしょうか?

さらに、より将来的に私はどのように私は物理的に私の項目の間の指定された場所にセパレータを配置します)私のリストボックス

2の 下半分に置かれる複数のアイテムを持っているかもしれませんwan't 、私の ItemsPresenterを論理的な場所に分割するかのように?

+0

私も前にこれを持っていました。私は複数のリストボックスを積み重ね、それらのボーダーを設定して単一のリストボックスの*外観*を与えましたが、表面の下にはそれぞれ独自のアイテムソースがありました。唯一の手の込んだビットは、選択ジェスチャーを調整して、エンドユーザーの「経験」が1つのアイテムしか選択していないことを見ていた。 –

+0

ちょっとそれを避けたい:) –

+0

1つのコントロールを使用する場合は、まだ答えがあります:VirtualizingStackPanelからクラスを派生させ、独自のItemsControlGeneratorを実装します。私も前にそれをして、それがあなたが何をしているかを与えることを証明することができます。欠点として、私は完全に楽しい経験としてICGを書くことはしません。 :) –

答えて

8

代わりに、複数のListBoxのコントロールあなたが必要とどのように多くのセパレーターのに基づいて「n」は小さなグループにあなたのコレクションを分割することができれば、あなたは、例えばので、同じListBox

CompositeCollectionを介して一緒にすべてを置くことができます私が持っていると言う:

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アウトをバインドし、それに取り組むことができますどのソースリストが現在選択されているアイテムに属するかを示します。

+0

それは素晴らしい、私はそれを試してみるよ –

関連する問題