是否可以在XAML中的TemplateBinding上使用转换器?

pum*_*wan 15 xaml binding styles converter templatebinding

我正在构建一个按钮样式,它依赖于将颜色画笔转换为较暗的阴影来创建阴影.在常规的XAML中,我有一个转换器,而不是我在绑定上使用的转换器完美地工作:

BorderBrush="{Binding Background, Converter={StaticResource ColourBrushToDarker}}"
Run Code Online (Sandbox Code Playgroud)

但我不能让转换器在样式定义中使用TemplateBinding.有办法吗?Visual Studio只允许在TemplateBinding上使用转换器.

我试过以下没有运气:

Background="{Binding Converter={StaticResource ColourBrushToDarker}, ConverterParameter={Binding Path=Background}}"/>
Run Code Online (Sandbox Code Playgroud)

(我已尝试使用TemplateBinding替换Binding以及其他几个迭代的上述行)

可以这样做吗?我想到的另一件事是用C#编写一个执行转换的属性,但是一个样式没有代码隐藏文件.

我之后的结果是能够创建一个比Background属性更暗的新画笔,因此按钮的阴影总是比它的主背景颜色稍暗.

pum*_*wan 30

经过一些(繁琐的)试验和错误后,我找到了一个解决方案:

Background="{Binding Background, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource ColourBrushToDarker}}"
Run Code Online (Sandbox Code Playgroud)

我还在学习XAML样式,但我认为这里发生的事情是我可以通过将相对源设置为模板父代来使用Binding,就像它是TemplateBinding一样.由于我正在使用Binding(而不是TemplateBinding),我可以添加一个转换器并获得所需的结果.