WPF:将命名颜色设置为资源?

时间:2010-01-24 20:50:26

标签: wpf resources colors wpf-controls

我正在修改WPF Calendar控件的控件模板,以更改文本的颜色以及控件上的上一页下一页箭头。我想将颜色设置为名为MyTextBrush的本地SolidColorBrush资源。

“上一个”和“下一个”按钮具有单独的控件模板,每个按钮都为其按钮的箭头绘制一个Path对象。以下是上一页按钮的相关标记:

<Path Margin="14,-6,0,0" Height="10" Width="6" VerticalAlignment="Center" HorizontalAlignment="Left" Stretch="Fill" Data="M288.75,232.25 L288.75,240.625 L283,236.625 z">
    <Path.Fill>
        <SolidColorBrush x:Name="TextColor" Color="#FF333333" />
    </Path.Fill>
</Path>

请注意,使用TextColor属性将颜色命名为x:Name

这是我的问题:需要x:Name属性 - 如果缺少WPF,则抛出异常。这意味着我不能简单地用对MyTextBrush资源的引用替换整个画笔,因为我会丢失x:Name值。那么,如何引用MyTextBrush,同时仍然保留此特定控件模板中画笔的x:Name属性?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

  

那么,我该如何引用MyTextBrush,   同时仍保留x:名称   这个画笔的属性   特定的控制模板?

关于这个问题,听起来你正在使用一个狡猾/脆弱的模板。它是什么控制模板?

  • 如果您拥有模板的完全源代码控制权,请删除对指定元素的引用(很可能是在故事板中)。他们必须出于某种原因为画笔制作动画。
  • 另一个选项可能是在模板中创建另一个未使用的画笔(可能在隐藏的元素上),并使用正确的名称来保持模板的快乐。
  • 最后,你可以尝试添加x:Name onto the brush in the shared RD,但这很复杂,不确定它是否值得!

另外两个可能的解决方案:

  • 尝试仅绑定SCB的Color属性...应该作为其DP
  • 更改模板动画,使它们不使用命名画笔,而是使用命名父级,然后通过TargetProperty访问画笔,例如Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" Storyboard.TargetName="myNamedParent"

答案 1 :(得分:0)

最好的解决方案似乎是将Color属性分解为自己的标记,并为此使用资源引用。这是它的样子:

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