【问题标题】:How can I discover WPF resources defined in another assembly?如何发现在另一个程序集中定义的 WPF 资源?
【发布时间】:2011-06-15 03:00:12
【问题描述】:

我正在为另一个供应商提供的 WPF 复合应用程序编写一些扩展模块。该应用程序是主题化的,用户可以从多个主题中进行选择,这些主题将改变整个应用程序的外观,包括在主题管理器中适当注册的任何自定义模块。

我真的希望我的自定义扩展看起来像一个集成组件,因此我尝试仅使用在主应用程序中定义为资源的样式。由于我仍在学习 XAML 的细微差别,因此我更多地通过反复试验来设计样式。

我想知道是否有一种方法可以“发现”不同程序集中可用的样式。这是我目前正在做的一个例子。

<Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <common:DesignTimeResourceDictionary Source="/Vendor.Desktop.WPFCommon;component/themes/generic.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
</Window.Resources>

<Border 
    Background="{DynamicResource LightGradientBackgroundBrush}"
    Margin="0"
    >

LightGradientBackgroundBrush 在供应商程序集中定义。通过包含上述ResourceDictionary,样式在设计时呈现,并且画笔在 XAML 编辑器中没有下划线。

我能找到其他定义的样式吗?我只知道这种风格,因为它在供应商提供的样本中被提及。

编辑:

我知道反射器的 BAML 插件,但它不适用于反射器 7,除非它已重新编译/修补。有人已经这样做了here though

我希望有更好的解决方案。样式的智能感知会很棒。

【问题讨论】:

    标签: wpf styles


    【解决方案1】:

    曾经有一个用于 viewing BAML resources 的 Reflector 插件,可以很好地解决这个问题。但是自从 Redgate 搞砸了派对后,我已经有一段时间没有使用 Reflector 了。它可能不适用于当前版本。

    【讨论】:

    【解决方案2】:

    您知道您的资源字典在哪里,因此您应该能够在代码中加载它并枚举可用资源。这至少会让您了解可用的内容。

    查看此链接:http://blogs.claritycon.com/leeroth/2009/05/20/load-xaml-resource-dictionaries-at-runtime/

    枚举 Keys 属性并使用 item 属性访问资源。您可以根据需要获得尽可能详细的信息,但至少您应该能够吐出资源名称。

    【讨论】:

    • 我非常喜欢这个答案,因为它不涉及您需要购买的工具和需要修补的插件。但是,我已经有了反射器并安装了预先修补的插件,这让我摆脱了困境。不知道为什么你被否决了。考虑到这将是大多数还没有反射器的人的答案,有点苛刻。
    猜你喜欢
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    相关资源
    最近更新 更多