我正在构建一个按钮样式,它依赖于将颜色画笔转换为较暗的阴影以创建阴影。在常规的XAML中,我有一个转换器,而不是我在绑定上使用的转换器完美运行:
BorderBrush="{Binding Background, Converter={StaticResource ColourBrushToDarker}}"
但我无法让转换器在样式定义中使用TemplateBinding。有办法吗? Visual Studio不允许在TemplateBinding上使用转换器。
我试过以下但没有运气:
Background="{Binding Converter={StaticResource ColourBrushToDarker}, ConverterParameter={Binding Path=Background}}"/>
(我已尝试使用TemplateBinding替换Binding以及其他几个迭代的上述行)
可以这样做吗?我想到的另一件事是用C#编写一个用于转换的属性,但是一个样式没有代码隐藏文件。
我之后的结果是能够创建一个比Background属性更暗的新画笔,因此该按钮的阴影总是比其主背景颜色稍深。
答案 0 :(得分:28)
经过一些(繁琐的)试验和错误后,我找到了一个解决方案:
Background="{Binding Background, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource ColourBrushToDarker}}"
我还在学习XAML样式,但我认为这里发生的事情是我可以通过将相对源设置为模板父代来使用Binding,就好像它是TemplateBinding一样。由于我正在使用Binding(而不是TemplateBinding),我可以添加一个转换器并获得所需的结果。
答案 1 :(得分:0)
模板绑定中的转换器可以按如下方式使用:
BorderBrush="{TemplateBinding Background, Converter={StaticResource ColourBrushToDarker}}"