在XAML中,是否可以对TemplateBinding使用转换器?

18

我正在构建一个基于将颜色刷转换为较暗阴影来创建按钮样式的方案。在常规XAML中,我使用一个转换器来绑定,在绑定上运行得非常完美:

我正在构建一个基于将颜色刷转换为较暗阴影来创建按钮样式的方案。在常规XAML中,我使用一个转换器来绑定,在绑定上运行得非常完美:

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

但是我无法让转换器在样式定义中与TemplateBinding一起正常工作。有什么解决方法吗?Visual Studio不允许在TemplateBinding上使用转换器。

我已经尝试过以下方法,但没有成功:

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

(我已经尝试过使用TemplateBinding替换Binding以及其他几个迭代版本)

这能做到吗?我想到的另一件事是在C#中编写一个执行转换的属性,但样式没有代码后备文件。

我想要的结果是能够创建一个比Background属性略暗的新画笔,这样按钮始终具有比其主要背景颜色略暗的阴影。

1个回答

38

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

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

我还在学习XAML样式,但我认为这里发生的事情是我能够使用绑定,就像设置相对源为模板父级时的TemplateBinding一样。由于我使用的是绑定(而不是TemplateBinding),我可以添加转换器并获得所需的结果。


1
请注意,由于它是可选语法,您可以在RelativeSource上省略"Mode="。 即: ### Background="{Binding Background, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource ColourBrushToDarker}}" ### - Zodman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接