Ich versuche, eine wiederverwendbare Navigationsstil Custom Control in WPF, wie eine Navigationsleiste auf einer Website zu erstellen. Es enthält Links zu allen Hauptseiten in meiner App. Dieses Steuerelement kann auf alle meine Seiten in meinem NavigationWindow gehen. Geben Sie ein einheitliches Erscheinungsbild über Seiten wie eine Website.WPF Style Active Item
Mein Problem besteht darin, den Link der aktuellen Seite anders zu formatieren als die Links der anderen Seiten, so dass Sie schnell einen Blick darauf werfen und sehen können, auf welcher Seite Sie gerade sind. Da das Steuerelement auf jeder Seite das gleiche ist, muss ich ihm mitteilen, welche Seite "aktiv" ist und über den entsprechenden Stil verfügen.
Mein erster Gedanke war, einfach Eigenschaften für das Steuerelement zu platzieren, eine für jede Seite, und dann die entsprechende Eigenschaft auf der Seite auf true festlegen. (Oder ich könnte eine Eigenschaft, die einen Enum-Wert akzeptiert, anstatt viele Eigenschaften aufweisen, so oder so)
Beispiel:
<local:Header IsHomePageActive="True" />
nun in der Steuer Vorlage für meinen Kopf Custom Control, kann ich eine Datatrigger dass Uhren diese Eigenschaft:
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource FindAncestor, AncestorType={x:Type local:Header}}, Path=IsHomePageActive}" Value="true">
<Setter ... />
<Setter ... />
<Setter ... />
</DataTrigger>
</Style>
Nach all dem Hintergrund, hier ist meine Frage. Das funktioniert, aber ich muss diesen DataTrigger und alle Setter darin für jede einzelne Seite duplizieren, da der Trigger direkt auf die Eigenschaft "IsHomePageActive" verweisen muss, die nur für den einen Link gilt. Also brauche ich für jeden Link einen anderen Style, obwohl der eigentliche STYLE dessen Beschreibung genau gleich ist (womit ich meine, die Setter sind gleich). Der einzige Unterschied besteht darin, welche Eigenschaft der Trigger überwacht.
Gibt es eine Möglichkeit, dies zu tun (oder etwas mit dem gleichen Endergebnis), ohne mit Hunderten von Zeilen duplizierten XAML enden?