2010-01-25 73 views
4

我有一个奇怪的问题让我难住。我正在修改WPF日历控件模板,出于我在下面解释的原因,我必须使用Color资源,而不是SolidColorBrush资源,用于我的文本颜色。现在,我的Color资源是这样的:绑定一个颜色资源?

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

现在我想的Color资源父属性绑定,但Color对象不具有Binding财产。那么,我将如何去约束这个资源呢?谢谢你的帮助。的WPF Calendar控件动画在几个地方其鼠标悬停文本,每个动画使用了名为SolidColorBrush


为什么我必须用一个颜色资源注意。我不能用资源引用替换画笔,因为我想保留动画,这意味着我必须保留这个名字。但是,我可以代替画笔的颜色,正如我在刷命名TEXTCOLOR做:

<!-- Modification: Changed template brush color --> 
<SolidColorBrush x:Name="TextColor"> 
    <SolidColorBrush.Color> 
     <StaticResource ResourceKey="MyTextColor" /> 
    </SolidColorBrush.Color> 
</SolidColorBrush> 

回答

0

我们在软件有同样的问题,这种解决方案上来。基本上你创建了一个类来实现对WPF的静态资源类的扩展,该类处理绑定,然后在你的XAML代码中使用它。很容易使用。

+0

链接的文章已死,也许你可以更新? – Kev 2012-02-05 19:38:28

5

我选择了smoura的答案作为正确的答案,因为它确实回答了我问过的问题。但是,我想我可能会问错误的问题,这是解决问题的更好办法。

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

<!-- Modification: Changed template brush color --> 
<SolidColorBrush x:Name="TextColor" Color="{Binding Path=Foreground, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Converter={StaticResource BrushToColorConverter}}" /> 

这种方法完全消除了我以前使用的Color资源。这更简单,我怀疑它更有效率。