Nuget包添加到Application.Resources MergedDictionary

时间:2018-02-14 22:24:19

标签: c# wpf nuget

背景

我们在内部使用 Nuget包作为在我们拥有的解决方案和项目的动物园中共享服务,库和资源的一种方式。

然而,对于 WPF ,我们还有自定义字体包,样式(以及其他 WPF 资源),我们希望与消费应用程序合并。

期望的结果

让我们将字体作为示例(但这对所有基于 Xaml 的资源都是通用的)。我们有几个矢量字体的自定义包,其中样式与它们相关联。添加 Nuget Package 时,让样式以某种方式进入全局(而不是向每个页面添加MergedDictionary引用或添加一行到Application.Resouces)即

<ResourceDictionary.MergedDictionaries>

我已经在Asp.net(使用app_startup)以及正在使用post build事件(看起来有点不稳定)的人身上看到过这方面的解决方案。

潜在解决方案

我一直在考虑的解决方案是在我们的 Nuget Libraries 中创建一个简单的Interface / Class,Tag WPF 全局资源,并使用反射和 Dependency Walker 到prob 程序集查找所述接口/类。这又将它们添加到代码中的Application.Resources,即

...
ResourceDictionary myResourceDictionary = new ResourceDictionary();
...
Application.Current.Resources.MergedDictionaries.Add(myResourceDictionary);

显然,我们仍然需要以某种方式对每个应用程序启用此功能,但它可以解决必须追踪Nuget资源并手动将它们添加到每个页面 Xaml 或{的问题{1}}。

我的问题

有没有办法解决开箱即用的问题?我可以使用 Nuget WPF 的一些管道可以实现这一点,我不知道吗?

0 个答案:

没有答案