【问题标题】:How do I copy a WPF resource in xaml?如何在 xaml 中复制 WPF 资源?
【发布时间】:2008-11-03 20:42:52
【问题描述】:

我想分配一个我已经有第二个名称的资源,类似于使用 Styles 的 BasedOn 属性。具体来说,我有一个用于一组名为 ForegroundColor 的元素的画笔,我想在一个名为 MouseOverBackgroundBrush 的控件模板(一个 ComboBox)中使用它。我想做这样的事情:

<ResourceCopy x:key="MouseOverBackgroundBrush" Value="{StaticResource ForegroundColor}" />

有没有办法做到这一点,或者在 Xaml 中有没有更好的方法来解决这个问题?

【问题讨论】:

    标签: wpf user-interface xaml resources


    【解决方案1】:

    这是一个在 XAML 中没有很好支持的功能。我相信您要么需要重复自己(并在需要更改画笔时随时更改两个位置)如果您不介意后面的代码,您可以完成复制,例如这个:

    Resources["MouseOverBackgroundBrush"] = Resources["ForegroundColor"];
    

    【讨论】:

    • 代码背后的问题是它们都在资源字典中,所以没有附加到资源的代码。
    • 实际上您可以为 ResourceDictionaries 提供代码。您需要使用 x:Class。
    • @Todd - 好主意,但如果我需要添加额外的文件,我可能只是制作一个自定义用户控件并将画笔分配给依赖属性,因为我认为这会有点更具可读性/可维护性。想法?
    • 我的想法是只使用相同的静态资源并命名它以便它可以重用。当资源实际上需要不同时,则创建新的静态资源。
    【解决方案2】:

    我不知道如何在 xaml 中复制资源(甚至可以完成吗?)就像你问的那样......但这是完成你想要做的事情的一种方法:

    <Color x:Key="firstColor">#FFD97A7A</Color>
    <Color x:Key="secondColor">#FFF4BFBF</Color>
    <LinearGradientBrush x:Key="firstGradientBrush" EndPoint="0.5,1" StartPoint="0.5,0">
        <GradientStop Color="{DynamicResource firstColor}" Offset="0"/>
        <GradientStop Color="{DynamicResource secondColor}" Offset="1"/>
    </LinearGradientBrush>
    <LinearGradientBrush x:Key="secondGradientBrush" EndPoint="0.5,1" StartPoint="0.5,0">
        <GradientStop Color="{DynamicResource firstColor}" Offset="0"/>
        <GradientStop Color="{DynamicResource secondColor}" Offset="1"/>
    </LinearGradientBrush>
    

    基本上,根据一些常见的颜色创建两个不同的画笔。

    【讨论】:

    • 我希望将来能够更改画笔并让更新通过我的 UI 的其余部分传播。例如,如果我有一个 ControlBackground 画笔,它是一个 SolidColorBrush,我会想在某个时候将它变成一个 LinearGradientBrush,而不需要在 30 个地方进行更改。
    • 更简单的方法 (imo) 回答是:跨度>
    • 是的,很遗憾,如果您要更改画笔类型……那么这种方法将不起作用。
    • 为什么您认为将数据绑定到颜色...比使用 DynamicResource 或 StaticResource 更容易?你的意思是你觉得它更具可读性还是什么?性能更高?我见过的大多数 xaml .. 都采用了 DynamicResource 或 StaticResource 路线。
    • 基本上只是更少的标签,您不必寻找其他地方来确定哪些颜色/选项是您继承选项的画笔的一部分。真的,这对我来说只是一种风格。
    猜你喜欢
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    相关资源
    最近更新 更多