2009-11-15 13 views
5

Ich habe eine ListBox. Jetzt möchte ich ein DataTemplate so schreiben, dass das erste Einzelteil roten Hintergrund und weißen Hintergrund für andere Einzelteile hat. Ich denke, ich muss einen DataTrigger schreiben, aber ich habe keine Ahnung, wie ich feststellen kann, dass DataTemplate auf das erste Element angewendet wird.Wie Index des aktuellen ListBox-Elements von DataTemplate zu ermitteln?

Antwort

7

Artikel Kontrollen haben einen Wechsel Zahl, die Sie Stil verwenden gegen

einen Blick here:

<Style TargetType="{x:Type ListBoxItem}"> 
    <Style.Triggers> 
     <Trigger Property="ItemsControl.AlternationIndex" Value="0"> 
      <Setter Property="Background" Value="LightBlue"></Setter> 
     </Trigger> 
     <Trigger Property="ItemsControl.AlternationIndex" Value="1"> 
      <Setter Property="Background" Value="LightGreen"></Setter> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

genießen!

+1

Es ist eine großartige Funktion, vielen Dank für Informationen. Aber ich brauche ** nur ** das erste Element, um roten Hintergrund zu haben, nicht jedes Element wo (itemIndex% AlternationCount) == 0. Natürlich kann ich AlternationCount an ItemsSource.Count binden, aber gibt es keinen besseren Weg zu tun Dies? – levanovd

+0

was Sie umreißen klingt akzeptabel, es ist alles in Xaml. es macht den Job fertig, und Sie können zu besseren Dingen übergehen. jemand anders könnte eine elegantere Lösung finden. Sie könnten eine Multibinding mit der ersten Bindungsbindung an das aktuelle Element und die zweite eine Vorgängerbindung, Bindung an die Itemsource der Listbox tun. Dann könnten Sie in Ihrem Konverter überprüfen, wie der Index des Artikels war. aber deine Lösung oben ist alles in XAML. Ich bevorzuge Lesbarkeit. es ist in Sichtweite in der XAML, nicht in einem Konverter gesperrt –

+0

Keine Notwendigkeit, AlternationCount an ItemsSource.Count binden: Setzen Sie es einfach auf Int32.MaxValue in der XAML. (Ich bevorzuge AlternationCount = "2147483647" gegenüber "{x: Static sys: Int32.Maxvalue}", da es schneller ist und 2^31-1 für die meisten Programmierer erkennbar ist). –

Verwandte Themen