2014-03-12 52 views
0

我需要在運行時從某些程序集加載我的ResourceDictionary從WPF的EmbeddedResource加載並檢查ResourceDictionary Uri

首先我設置BuildAction的的資源字典的,並使用代碼來構建URI。

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

這樣的工作,但後來我意識到,我需要檢查大會,之前我設置我的ResourceDictionary的URI。因爲如果ResourceDictionary不在程序集中,那會引發異常。

var rd = new ResourceDictionary 
     { 
      Source = uri 
     }; 

所以我把我的資源字典的BuildAction的與EmbeddedResource,爲了看到的ResourceDictionary在裝配用下面的代碼:

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

但現在,我不能使用uri加載ResourceDictionary。我盡我所能,但沒有成功。

有什麼想法?謝謝!

回答

0

嘗試設置Build ActionPage,然後您可以訪問大會的資源是這樣的:

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

然後,您可以訪問的資源是這樣的:

object obj = resources["key"]; 
+0

這幾乎就像是我的代碼。如果MyResource.xaml不在程序集中,那也會引發異常。 – Ivan

+0

你說得對,我完全忽略了你的assemblyName變量。你曾經試過將頁面的構建操作設置爲? –

+0

看來,你忽略了任何我的assemblyName變量; - )是的,我已經試過在開始。我的問題不是從頁面訪問資源。它正在將Uri設置爲ResourceDictionary的源。如果Resource.xaml不在彙編中,則會出現異常。 – Ivan