如何发现另一个程序集中定义的WPF资源?

问题描述

| 我正在为另一个供应商提供的WPF Composite应用程序编写一些扩展模块。该应用程序是主题化的,并为用户提供了从多个主题中进行选择的选项,这些主题将改变整个应用程序的外观,包括可以在主题管理器中适当注册自己的任何自定义模块。 我真的希望我的自定义扩展看起来像一个集成组件,因此我试图仅使用在主应用程序中定义为资源的样式。由于我仍在学习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\"
    >
“ 1”是在供应商程序集中定义的。通过包含上面的
ResourceDictionary
,可以在设计时显示样式,并且XAML编辑器中不会对画笔进行下划线。 我可以找到其他定义的样式吗?我只知道这种样式,因为在传递供应商提供的样本时提到了这种样式。 编辑: 我知道反射器的BAML加载项,但是除非重新编译/修补它,否则它不适用于反射器7。不过,有人已经在这里做了。 我希望有更好的解决方案。样式的Intellisense很棒。     

解决方法

        过去曾经有一个Reflector加载项,用于查看对它有效的BAML资源。但是自Redgate造成聚会崩溃以来,我已经有一段时间没有使用Reflector了。它可能不适用于当前版本。     ,        您知道资源字典在哪里,因此您应该能够将其加载到代码中并枚举可用资源。这至少会让您对可用功能有所了解。 看到此链接:http://blogs.claritycon.com/leeroth/2009/05/20/load-xaml-resource-dictionaries-at-runtime/ 枚举Keys属性,并使用item属性访问资源。您可以根据需要获得详细的信息,但是至少您应该能够吐出资源名称。