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

是否可以在XAML中的TemplateBinding上使用转换器?,xaml,binding,styles,converter,templatebinding,Xaml,Binding,Styles,Converter,Templatebinding,我正在构建一个按钮样式,它依赖于将颜色笔刷转换为较暗的阴影来创建阴影。在常规XAML中,我有一个转换器,它比我在绑定中使用的转换器工作得更好: BorderBrush="{Binding Background, Converter={StaticResource ColourBrushToDarker}}" 但我无法让转换器在样式定义中使用TemplateBinding。有办法吗?Visual Studio不允许在TemplateBinding上使用转换器 我尝试了以下方法,但没有成功: Ba

我正在构建一个按钮样式,它依赖于将颜色笔刷转换为较暗的阴影来创建阴影。在常规XAML中,我有一个转换器,它比我在绑定中使用的转换器工作得更好:

BorderBrush="{Binding Background, Converter={StaticResource ColourBrushToDarker}}"
但我无法让转换器在样式定义中使用TemplateBinding。有办法吗?Visual Studio不允许在TemplateBinding上使用转换器

我尝试了以下方法,但没有成功:

Background="{Binding Converter={StaticResource ColourBrushToDarker}, ConverterParameter={Binding Path=Background}}"/>
(我已经用TemplateBinding替换了Binding,并尝试了上面这一行,以及其他几个迭代)

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

我追求的结果是能够创建一个比背景属性暗一点的新笔刷,这样按钮的阴影总是比其主背景颜色暗一点。

经过一些(乏味的)尝试和错误,我找到了一个解决方案:

Background="{Binding Background, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource ColourBrushToDarker}}"
我仍在学习XAML样式,但我认为这里发生的事情是,通过将相对源设置为模板父级,我能够像使用TemplateBinding一样使用绑定。因为我使用的是绑定(而不是TemplateBinding),所以我可以添加一个转换器并获得所需的结果。

注意,您可以在RelativeSource上删除“Mode=”作为可选语法。i、 e:####Background=“{Binding Background,RelativeSource={RelativeSource TemplatedParent},Converter={StaticResource colorbushtodarker}”###