代码之家  ›  专栏  ›  技术社区  ›  David Veeneman

将命名颜色设置为资源?

  •  1
  • David Veeneman  · 技术社区  · 15 年前

    我正在修改wpf日历控件的控件模板,以更改文本的颜色和 以前的 接下来 控件上的箭头。我想将颜色设置为本地solidcolorbrush资源,名为 MyTextBrush .

    “上一个”和“下一个”按钮具有单独的控件模板,每个按钮都为其按钮的箭头绘制一个路径对象。这是 以前的 按钮:

    <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:姓名 属性是必需的--如果缺少该属性,则WPF将引发异常。这意味着我不能简单地用参考 我的文本画笔 资源,因为我会失去 X:姓名 价值。那么,我该如何引用 MyTrasB刷 ,同时仍保留 X:姓名 此特定控件模板中画笔的属性?

    谢谢你的帮助。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Jack Ukleja    15 年前

    那么,我如何引用mytextbrush, 同时仍保留x:name 此中画笔的属性 特定控制模板?

    关于这个问题,听起来您使用的是一个不可靠/脆弱的模板。它是什么控制模板?

    • 如果您对模板有完整的源代码控制,请删除对命名元素的引用(很可能在情节提要中)。他们一定是出于某种原因在为画笔设置动画。
    • 另一种选择可能是在模板中(可能在隐藏元素上)使用正确的名称创建另一个未使用的画笔,以使模板满意。
    • 最后,您可以尝试添加 x:Name onto the brush in the shared RD 但这很复杂,不确定它是否值得!

    还有两个潜在的解决方案:

    • 尝试仅绑定SCB的颜色属性…它应该是一个dp
    • 更改模板动画,使其不使用命名的画笔,而是使用命名的父级,然后通过TargetProperty访问画笔,例如。 Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" Storyboard.TargetName="myNamedParent"
        2
  •  0
  •   David Veeneman    15 年前

    最好的解决办法似乎是打破 Color 属性输出到它自己的标记,并为此使用资源引用。这是它的样子:

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