在WPF自定义控件库中加载自定义样式

时间:2010-10-21 21:38:26

标签: wpf xaml wpf-controls

我有一个自定义控件库(例如MyCustomControls.dll),它是第三方应用程序的插件。它作为类库输出,并在运行时由第三方应用程序调用。我的问题是我为各种用户控件定义的自定义样式,例如listviewitem,现在无法在应用程序级别加载textblock。

如何将自定义样式添加到资源查找层次结构中,以便库中的所有控件都使用我的自定义样式?

例如,如果我定义下面的样式,MyCustomControls.dll中的所有控件在创建时都不会看到它。但是,如果我将MyCustomControls.dll添加到应用程序并将其加载到应用程序资源中,则会应用样式。

注意:第三方应用程序不是WPF应用程序。 Application.Current在运行时返回null。

1 个答案:

答案 0 :(得分:1)

如果您无法访问第三方应用程序,并且它不是WPF应用程序(是Silverlight吗?),则无法为xFl注入用于WPF的样式。此外,只有第三方应用程序将知道如何在以后应用皮肤。我想,如果它不是你的应用程序,你唯一能做的就是遵循“制造商的指示”。

仅供参考: 如果您拥有双方 - 主应用程序和要插入的资源,您可以使用MergeDictionaries合并资源dll。为了访问资源的DLL,您需要使用Pack URI语法。 像这样:

在App.xaml中:

   <ResourceDictionary>
       <ResourceDictionary.MergedDictionaries>
          <ResourceDictionary Source="pack://application:,,,/YOUR_DLL;component/SUBFOLDER/YOURCUSTOMSTYLES.xaml"/>
       </ResourceDictionary.MergedDictionaries>
   </ResourceDictionary>

在这些情况下,保持资源的密钥与主应用程序所期望的密钥相同非常重要。这是因为典型的皮肤机制是在消耗资源时使用DynamicResource,因此,每次使用它们时都会通过“密钥”查找它们。如果使用相同的键将现有资源替换为另一个资源,例如,将名为“ButtonBackground”的资源切换为黄色,并且应用程序在整个应用程序中以动态方式使用此资源作为按钮的背景,所有按钮应变为黄色