2015-03-02 17 views
10

Buduję styl przycisku, który polega na przekształceniu pędzla koloru w ciemniejszy odcień w celu utworzenia cienia. W regularnych XAML Mam konwerter niż używam na wiązanie że działa perfekcyjnie:Czy można używać konwertera na TemplateBinding w XAML?

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

Ale nie mogę dostać konwertera do pracy z TemplateBinding w definicji stylu. Czy istnieje sposób? Visual Studio po prostu nie pozwala na konwerter na TemplateBinding.

Próbowałem następujących bez powodzenia:

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

(a próbowałem powyższą linię TemplateBinding zastępując oprawy, a także kilka innych iteracje)

można to zrobić? Inną rzeczą, o której pomyślałem, było kodowanie właściwości w języku C#, która dokonuje konwersji, ale styl nie zawiera kodu znajdującego się za plikiem.

Rezultatem, którego szukam, jest możliwość utworzenia nowego pędzla, który jest cień ciemniejszy niż właściwość Tło, więc przycisk zawsze ma cień, który jest nieco ciemniejszy niż jego główny kolor tła.

Odpowiedz

21

Po jakimś (nudny) prób i błędów znalazłem rozwiązanie:

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

wciąż się uczę XAML stylizacji, ale myślę, że to, co się tu dzieje jest to, że jestem w stanie używać Binding jakby to było TemplateBinding, ustawiając względne źródło na szablon macierzysty. Ponieważ używam Binding (nie TemplateBinding), jestem w stanie dodać konwerter i uzyskać pożądany wynik.