【发布时间】:2018-02-08 15:38:24
【问题描述】:
我有一个我写的值转换器,它允许我绑定一个属性,根据给定的(硬编码)值测试该属性,并根据测试是真还是假返回一个画笔。转换器继承自DependencyObject 并实现IValueConverter。它公开了两个依赖属性,称为 PositiveBrush 和 NegativeBrush。
我在 XAML 中这样声明它:
<UserControl.Resources>
<xyz:CBrushConverter x:Key="BrushConverter"
PositiveBrush="{DynamicResource Glyph.Resource.Brush.LightGreen}"
NegativeBrush="{DynamicResource Glyph.Resource.Brush.DarkGray}" />
</UserControl.Resources>
然后我可以像这样调整给定元素的颜色:
<TextBlock Foreground="{Binding SomeProperty, ConverterParameter='SomeValue', Converter={StaticResource BrushConverter}}" />
所以在这个例子中(假设 SomeProperty 返回一个字符串)如果绑定的属性 'SomeProperty' 匹配 'SomeValue' 转换器将返回 PositiveBrush 作为前景(否则它将返回 NegativeBrush)。
到目前为止一切顺利 - 可能还有其他方法可以给这只猫剥皮;但这很长一段时间以来一直对我很有帮助,我真的不想摇摆不定。
然而,我想做的是将我的正和负画笔声明为绑定表达式的一部分。现在,如果我想使用 Red/Green 和 Blue/Yellow 颜色组合,我需要声明两个 BrushConverter。但如果我可以将正/负画笔声明为绑定表达式的一部分,我可以使用相同的转换器。
在伪代码中,类似这样的东西(显然这不起作用):
<Grid Foreground="{Binding SomeProperty, ConverterParameter='SomeValue', Converter={StaticResource BrushConverter, BrushConverter.PositiveBrush='Red', BrushConverter.NegativeBrush='Green'}}" />
我确实在堆栈上找到了一个类似的问题,How can I set a dependency property on a static resource?,但它没有明确解决我的问题。
所以...我的 google-foo 很弱 - 如果可能的话,我无法找到正确的搜索词来剖析 Xaml 绑定语法并自己解决这个问题。
一如既往,感谢您的帮助!
【问题讨论】:
标签: wpf xaml dependency-properties ivalueconverter