2015-03-02 26 views
10

Sto costruendo uno stile di pulsante che si basa sulla conversione di un pennello colorato in una tonalità più scura per creare un'ombra. In XAML regolare ho un convertitore di quanto io uso sul legame che funziona perfettamente:È possibile utilizzare un convertitore su un TemplateBinding in XAML?

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

Ma non riesco a ottenere il convertitore di lavorare con TemplateBinding in una definizione di stile. C'è un modo? Visual Studio non consente proprio un convertitore su TemplateBinding.

ho provato quanto segue senza fortuna:

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

(e ho provato la linea di cui sopra con TemplateBinding sostituzione di rilegatura, nonché diverse altre iterazioni)

si può fare? L'altra cosa che ho pensato è stata la codifica di una proprietà in C# che esegue la conversione, ma uno stile non ha un codice dietro il file.

Il risultato che desidero è la possibilità di creare un nuovo pennello con una sfumatura più scura rispetto alla proprietà Sfondo, in modo che il pulsante abbia sempre un'ombra leggermente più scura del colore di sfondo principale.

risposta

21

Dopo alcuni tentativi (noiosa) e l'errore ho trovato una soluzione:

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

sto ancora imparando XAML styling, ma penso che quello che sta succedendo qui è che io sono in grado di utilizzare rilegatura come se era TemplateBinding impostando la fonte relativa al modello padre. Dal momento che sto usando Binding (non TemplateBinding), sono in grado di aggiungere un convertitore e ottenere il risultato desiderato.

Problemi correlati