Подтвердить что ты не робот

Можно ли использовать конвертер на TemplateBinding в XAML?

Я создаю стиль кнопки, который полагается на преобразование цветной кисти в более темный оттенок, чтобы создать тень. В обычном XAML у меня есть конвертер, чем я использую для привязки, который отлично работает:

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

Но я не могу заставить конвертер работать с TemplateBinding в определении стиля. Есть ли способ? Visual Studio просто не разрешает конвертер на TemplateBinding.

Я пробовал следующее без везения:

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

(И я пробовал приведенную выше строку с заменой TemplateBinding Binding, а также несколькими другими итерациями)

Можно ли это сделать? Другая вещь, о которой я думал, - это кодирование свойства в С#, которое выполняет преобразование, но стиль не содержит кода за файлом.

В результате я получаю возможность создать новую кисть, которая будет темнее, чем свойство Background, поэтому кнопка всегда имеет тень, немного более темную, чем основной цвет фона.

4b9b3361

Ответ 1

После некоторых (утомительных) проб и ошибок я нашел решение:

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

Я все еще изучаю стиль XAML, но я думаю, что здесь происходит то, что я могу использовать Binding, как если бы это был TemplateBinding, установив относительный источник родительскому шаблону. Поскольку я использую Binding (не TemplateBinding), я могу добавить конвертер и получить желаемый результат.

Ответ 2

Конвертер в связывании шаблонов можно использовать следующим образом:

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