2016-11-28 44 views
0

不,這不僅僅是關於pack URI的另一個問題。 :-)存儲在外部資源DLL中的圖像

我有一個應用程序外部的資源DLL來存儲品牌數據。它存儲BitmapImage在其ResourceDictionary(注意,原始圖像文件名會爲每個品牌不同,因此每個DLL):

<BitmapImage x:Key="Logo" UriSource="Resources/changing-vendorname.png" /> 

在主應用程序,我從它讀取外部DLL和獲得各種資源,計有廠商標識:

Assembly.LoadFrom(BrandDllPath); 
var dict = new ResourceDictionary(); 
dict.Source = new Uri("pack://application:,,,/BrandDll;component/Themes/Generic.xaml"); 
var VendorLogo = (BitmapImage)dict["Logo"]; 

當我研究這個VendorLogo變量,它包含了BitmapImage正如預期。不過,當我想在Image控件來顯示它:

Image.Source = VendorLogo; 

我什麼也沒得到。沒有錯誤信息,只是沒有顯示。

其實,同樣的事情發生,如果我把我自己之間的資源使用:

Application.Current.Resources["Logo"] = (BitmapImage)dict["Logo"]; 

,並嘗試從XAML中使用它:

<Image Source="{DynamicResource Logo}" /> 

我也一樣,有很多的不同資源,字符串,顏色(實際上是應用程序的主題),除了圖像以外,一切正常。

+0

如果你把組件名稱中的原始URI,如'UriSource = 「包://應用:,,,/BrandDll;組件/資源/ vendorname.png」'。 – Clemens

+0

不,這就是爲什麼我從我開始的那句話開始。 :-)我不知道原來的名字。將會有數百個不同品牌的DLL,每個都有自己的引用圖像。這就是爲什麼它被放入字典並分配了一個通用鍵。更新了這個問題來強調這一點。 –

+0

我測試過這一點,對我來說,一個完整的包URI適用於原始圖像'UriSource'。 – Clemens

回答

0

克萊門斯給了我一個想法,可以變成一個工作解決方案。取而代之的

var VendorLogo = (BitmapImage)dict["Logo"]; 

我們有一個多步驟的過程,得到原始圖像的名字,並使用它:

var logo = (BitmapImage)dict["Logo"]; 
string uri = "pack://application:,,,/BrandDll;component/" + logo.UriSource; 
var VendorLogo = new BitmapImage(new Uri(uri)); 
// or 
Application.Current.Resources["Logo"] = new BitmapImage(new Uri(uri)); 

,並使用它像這樣:

<Image Source="{DynamicResource Logo}" />