0

我需要在运行时从一些程序集中加载我的ResourceDictionary 。

首先,我将ResourceDictionary 的BuildAction设置为Page,并使用代码来构建 uri。

    var uri = new Uri(string.Format(@"/{0};component\Resources\MyResource.xaml",
 assemblyName), UriKind.RelativeOrAbsolute);

那行得通,但后来我意识到,在将 uri 设置为我的 ResourceDictionary 之前,我需要检查程序集。因为,如果 ResourceDictionary 不在程序集中,则会引发异常。

var rd = new ResourceDictionary
         {
             Source = uri
         };

因此,我将 ResourceDictionary 的 BuildAction 设置为EmbeddedResource,以便使用以下代码查看程序集中的 ResourceDictionary:

var hasResource = assembly.GetManifestResourceNames().
                 Any(resourceName => resourceName.EndsWith("MyResource.xaml"));

但是现在,我无法使用 uri 加载 ResourceDictionary。我已经尽我所能,但没有成功。

任何想法?谢谢!

4

1 回答 1

2

尝试设置Build ActiontoPage然后你可以像这样访问程序集资源:

ResourceDictionary resources = new ResourceDictionary();
resources.Source = new Uri("pack://application:,,,/AssemblyName;component\Resources\MyResource.xaml");

然后你可以像这样访问资源:

object obj = resources["key"];
于 2014-03-12T17:50:12.193 回答