绑定颜色资源?

时间:2010-01-25 14:56:11

标签: wpf binding resources colors wpf-controls

我有一个奇怪的问题,让我难过。我正在修改WPF日历控件模板,由于我在下面解释的原因,我必须使用Color资源而不是SolidColorBrush资源作为我的文本颜色。现在,我的Color资源看起来像这样:

<!-- My Colors -->
<Color x:Key="MyTextColor">Blue</Color>

现在我想将Color资源绑定到父属性,但Color对象没有Binding属性。那么,我将如何绑定此资源?谢谢你的帮助。


请注意为什么我必须使用Color资源: WPF日历控件在几个地方动画显示鼠标悬停的文本,每个动画使用一个名为{ {1}}。我不能用资源引用替换画笔,因为我想保留动画,这意味着我必须保留名称。但我可以替换画笔颜色,就像我在名为 TextColor 的画笔中所做的那样:

SolidColorBrush

2 个答案:

答案 0 :(得分:5)

我选择了smoura的答案是正确答案,因为它确实回答了我提出的问题。但是,我想我可能已经提出了错误的问题,这就是解决这个问题的更好方法。

我决定使用资源,然后尝试绑定该资源。更好的方法是直接绑定Color属性。为此,我创建了一个名为IValueConverter的简单BrushToColorConverter,然后使用它将命名画笔的颜色绑定到我正在创建的Foreground的{​​{1}}属性。标记看起来像这样:

UserControl

这种方法完全消除了我之前使用过的<!-- Modification: Changed template brush color --> <SolidColorBrush x:Name="TextColor" Color="{Binding Path=Foreground, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Converter={StaticResource BrushToColorConverter}}" /> 资源。它更简单,我怀疑,更有效率。

答案 1 :(得分:0)

我们的软件遇到了同样的问题,并提出了这个解决方案。基本上,您创建了一个类,该类实现了WPF的静态资源类的扩展,该类处理绑定,然后在XAML代码上使用它。非常好用。