Можно ли использовать конвертер на 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, поэтому кнопка всегда имеет тень, немного более темную, чем основной цвет фона.
Ответы
Ответ 1
После некоторых (утомительных) проб и ошибок я нашел решение:
Background="{Binding Background, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource ColourBrushToDarker}}"
Я все еще изучаю стиль XAML, но я думаю, что здесь происходит то, что я могу использовать Binding, как если бы это был TemplateBinding, установив относительный источник родительскому шаблону. Поскольку я использую Binding (не TemplateBinding), я могу добавить конвертер и получить желаемый результат.
Ответ 2
Конвертер в связывании шаблонов можно использовать следующим образом:
BorderBrush="{TemplateBinding Background, Converter={StaticResource ColourBrushToDarker}}"