绑定颜色资源?

Dav*_*man 4 wpf resources binding colors wpf-controls

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

<!-- My Colors -->
<Color x:Key="MyTextColor">Blue</Color>
Run Code Online (Sandbox Code Playgroud)

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


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

<!-- Modification: Changed template brush color -->
<SolidColorBrush x:Name="TextColor">
    <SolidColorBrush.Color>
        <StaticResource ResourceKey="MyTextColor" />
    </SolidColorBrush.Color>
</SolidColorBrush>
Run Code Online (Sandbox Code Playgroud)

Dav*_*man 5

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

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

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

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