从WPF中的EmbeddedResource加载并检查ResourceDictionary Uri

时间:2014-03-12 16:39:33

标签: wpf uri resourcedictionary buildaction

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

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

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

这有效,但后来我意识到,在将uri设置为我的ResourceDictionary之前,我需要检查程序集。因为,如果ResourceDictionary不在程序集中,那将抛出异常。

var rd = new ResourceDictionary
         {
             Source = uri
         };

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

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

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

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

尝试将Build Action设置为Page然后您可以像这样访问程序集资源:

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

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

object obj = resources["key"];