从外部文件或程序集加载 WPF 样式或其他静态资源

Posted

技术标签:

【中文标题】从外部文件或程序集加载 WPF 样式或其他静态资源【英文标题】:Load WPF styles or other Static Resources from an external file or assembly 【发布时间】:2010-10-16 22:36:18 【问题描述】:

我有几个 WPF 应用程序,我希望我的所有样式都在一个共享程序集中,而不是在每个应用程序中单独声明它们。

我正在寻找一种方法,这样我就不必更改现有应用程序中的所有Style="StaticResource BlahBlah";我只是想添加对这个样式程序集的引用,并从当前应用程序中删除它,所以它是从程序集中获取的。

有什么办法吗?

【问题讨论】:

【参考方案1】:

引用外部 ResourceDictionary(XAML 文件):

<Application.Resources>
    <ResourceDictionary Source="MyResources.xaml" />
</Application.Resources>

引用外部资源字典 (DLL):

<Application.Resources>
    <ResourceDictionary Source="/MyExternalAssembly;component/MyResources.xaml" />
</Application.Resources>

【讨论】:

但是您能说一下我们如何覆盖其他程序集中的资源 xaml 文件中存在的样式吗?例如:设置了 Foreground 属性的样式是默认样式(没有任何 x:Key)。然后我只想更改背景属性。所以我使用了BaseOn,但它不起作用。 :( @amkh,一旦将该样式导入范围,您就可以重新声明并覆盖它,在高范围级别创建一个新样式,设置为 BasedOnStaticResource x:Type TextBox(用适当的替换 TextBox类型。 非常感谢。我的错误是我在使用 BasedOn 时在错误的位置创建了样式。 如果将使用该资源的 UserControl 位于类库项目中并且没有 App.xaml 怎么办? @JoanComasFdz 您可以在任何地方引用该资源字典。您甚至可以将其添加到用户控制资源中。但我想也许你可以在Themes\Generic.xaml 中引用它,我没有尝试过,但它可能会起作用。

以上是关于从外部文件或程序集加载 WPF 样式或其他静态资源的主要内容,如果未能解决你的问题,请参考以下文章

WPF做的Winform 怎样从外部xml文件读取样式

2021-09-12 WPF上位机 06-资源字典与样式

WPF跨程序集共享样式(跨程序集隔离样式和代码)

WPF 如何引入外部样式

从外部应用程序隐藏或删除按钮

asp.net中未能加载文件或程序集