我正在构建一种按钮样式,该样式依赖于将画笔转换为较暗的阴影来创建阴影。在常规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一样使用Binding。由于我使用的是绑定(而不是TemplateBinding),所以我可以添加一个转换器并获得所需的结果。