【问题标题】:Alias or Reference in ResourceDictionaryResourceDictionary 中的别名或引用
【发布时间】:2011-04-26 22:59:21
【问题描述】:

我正在寻找一种方法,可以在 ResourceDictionary 多个键中提供一个项目。有没有办法做到这一点?

<DataTemplate x:Key="myTemplate" ... />
<AliasedResource x:Key="myTemplateViaAlias" Target="myTemplate" OR_Target={StaticResource myTemplate} />

当我打电话给TryFindResource("myTemplateViaAlias") 时,我想取出 myTemplate。我想我可以自己创建一个AliasedResource 类,并在我从字典中取出它时在代码中取消对它的引用,但如果有内置方法,我宁愿不这样做。

【问题讨论】:

    标签: wpf resources reference alias resourcedictionary


    【解决方案1】:

    您可以通过动态资源管道资源(请注意,蹩脚的 UI 设计师不会喜欢它)

    <Color x:Key="color">Red</Color>
    <DynamicResource x:Key="mycolor" ResourceKey="color"/>
    
    <Rectangle Width="100" Height="100">
        <Rectangle.Fill>
            <SolidColorBrush Color="{StaticResource color}"/>
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Width="100" Height="100">
        <Rectangle.Fill>
            <SolidColorBrush Color="{StaticResource mycolor}"/>
        </Rectangle.Fill>
    </Rectangle>
    

    【讨论】:

    • 完美,谢谢。现在我只需要等待 8 分钟即可接受。
    • 嗯,从来没有尝试过动态资源中的数据庙,因为控件不知道它会得到哪些数据类型,它如何使用特定的动态资源?
    • 对于 UI 资源,动态资源在 Blend 中确实有效。只是不会在不添加字典的情况下默认加载。
    • @Danny Varod:我不明白你的第一条评论是什么意思......(当我说糟糕的 UI 设计师时,我显然是指 Visual Studio)
    • Question 中有 DataTemplate,通常用于定义特定数据类型在 UI 中的表示方式。由于 UI 可以绑定到多种数据类型,因此在许多情况下通过名称调用数据模板是有问题的(除非 UI 仅针对一种数据类型设计)。但是,对于样式,如您的答案示例所示,这确实有意义。
    【解决方案2】:

    据我所知,没有办法做到这一点。

    但是,如果您的目标是多个控件的多个模板, 你可能会走错路。

    您可以拥有多个具有相同全局命名键的资源(数据模板和动态资源), 或样式的默认键(控件类类型), 然后将不同的资源字典文件加载到每个控件/区域/选项卡/窗口中, 在运行期间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-25
      • 2019-07-12
      • 1970-01-01
      • 1970-01-01
      • 2016-09-09
      相关资源
      最近更新 更多