2017-05-19 3 views
1

Ich benutze ein HeaderedItemsControl. Jedes Element ist ein 3-spaltiges Raster mit einem Rahmen und einem Textblock in jeder Spalte. Ich möchte die Hintergrundfarbe der Borders in jedem Element wechseln. (Grund alternierende Reihe Hintergrundeffekt). Ich habe versucht, einen Stil auf der Benutzersteuerelement-Ebene für das Raster zu erstellen, die eine Hintergrundfarbe in sich auf alle Grenzen gelten, basierend auf dem Alter der enthaltenden Steuer:Wie lege ich den Stil eines Kindes basierend auf AlternateIndex des Elternteils fest?

<Style TargetType="Grid" x:Key="myItemsGrid"> 
    <Style.Resources> 
    <Style TargetType="Border"> 
     <Setter Property="Background" Value="Azure" /> 
     <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=AlternationIndex, RelativeSource={RelativeSource AncestorType=ItemsControl}}" Value="2"> 
      <Setter Property="Background" Value="{StaticResource color_LogoLight}" /> 
     </DataTrigger> 
     </Style.Triggers> 
    </Style> 
    </Style.Resources> 
</Style> 

The Das Setter-Bit funktioniert, da die Rahmen alle "Azure" sind. Aber wie kann ich den AlternationIndex korrekt referenzieren, so dass sich die Hintergrundfarbe des Rahmens für jede andere Zeile ändert. Ich habe versucht, die RelativeSource auf HeaderedItemsControl und ItemsControl zu zeigen, aber keines scheint das richtige Ziel zu sein. Ich habe den visuellen Live-Baum durchsucht, aber ich kann dort nichts finden, auf das ich mich beziehen könnte.

Jede Hilfe wird geschätzt.

Antwort

0

Sie müssen AlternationIndex auf ItemControl und nicht auf ItemsControl selbst suchen! Für welchen Typ müssen Sie jedoch verbindlich suchen? Zum Beispiel in ListBox ist es ein ListBoxItem und in ItemsControl ist es ein ContentPresenter.
Vergessen Path=(ItemsControl.AlternationIndex) und für Ihren Fall (Alter == 2) nicht Sie Alter in Items mindestens gesetzt haben! So sollte dieser Code funktionieren:

<DataTrigger Binding="{Binding Path=(ItemsControl.AlternationIndex), RelativeSource={RelativeSource AncestorType=ContentPresenter}}" Value="2"> 
    <Setter Property="Background" Value="{StaticResource color_LogoLight}" /> 
</DataTrigger> 
+0

Zwei Dinge ... Content ein bisschen war ich fehlte. Ich habe das Konzept verstanden, aber ich konnte nicht erkennen, was in diesem Fall als "ListBoxItem" fungiert. Und aus irgendeinem Grund machen die Klammern einen Unterschied, da es ohne sie nicht funktioniert. Sehr hilfreich. Vielen Dank für Ihre Antwort. –

Verwandte Themen