2015-03-02 12 views
10

Ich erstelle einen Schaltflächenstil, der darauf beruht, einen Farbpinsel in einen dunkleren Farbton zu konvertieren, um einen Schatten zu erzeugen. In regelmäßigen XAML habe ich einen Konverter, als ich auf der Bindung verwenden, die perfekt funktioniert:Ist es möglich, einen Konverter für eine TemplateBinding in XAML zu verwenden?

BorderBrush="{Binding Background, Converter={StaticResource ColourBrushToDarker}}" 

Aber ich kann den Konverter nicht bekommen mit Template in einer Stildefinition zu arbeiten. Gibt es einen Weg? Visual Studio lässt einen Konverter auf einem TemplateBinding einfach nicht zu.

Ich habe folgende ohne Glück versucht:

Background="{Binding Converter={StaticResource ColourBrushToDarker}, ConverterParameter={Binding Path=Background}}"/> 

(Und ich habe die obige Zeile versucht, mit Template Binding sowie mehrere anderen Iterationen ersetzt) ​​

dies getan werden kann? Die andere Sache, an die ich gedacht habe, war das Codieren einer Eigenschaft in C#, die die Konvertierung durchführt, aber ein Stil hat keinen Code hinter der Datei.

Das Ergebnis, das ich habe, ist in der Lage, einen neuen Pinsel zu erstellen, der eine Schattierung dunkler als die Hintergrundeigenschaft ist, so dass die Schaltfläche immer einen Schatten hat, der ein wenig dunkler als seine Haupthintergrundfarbe ist.

Antwort

21

Nach einigem (langweilig) Versuch und Irrtum habe ich eine Lösung gefunden:

Background="{Binding Background, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource ColourBrushToDarker}}" 

Ich bin immer noch XAML Styling zu lernen, aber ich denke, was hier passiert ist, dass ich in der Lage bin Bindung zu verwenden, als ob es war TemplateBinding, indem die relative Quelle auf den Vorlagen-Elternknoten gesetzt wurde. Da ich Binding (nicht TemplateBinding) verwende, kann ich einen Konverter hinzufügen und das gewünschte Ergebnis erzielen.