2016-11-28 16 views
0

いいえ、パックURIについての別の質問ではありません。 :-)外部リソースDLLに保存された画像

ブランドのデータを保存するためのアプリケーションの外部にリソースDLLがあります。それは(したがって、各DLLのため、元の画像ファイル名が各ブランドごとに異なるであろうことに注意)、そのResourceDictionaryBitmapImageを格納するメインアプリケーションで

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

、Iは、外部DLLを読み、そこから様々なリソースを取得します、ベンダーのロゴをinlcuding:

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

あなたは何を置けば代わりに

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

の我々は、元の画像の名前を取得し、それを使用してマルチステッププロセスを持っています'UriSource =" pack:// application:,,,/BrandDll; component/Resources/vendorname.png "のように、元のURIのアセンブリ名。 – Clemens

+0

だからこそ、私はそれを開始した文章から始めました。 :-)私は元の名前を知らない。数百もの異なるブランドのDLLがあり、それぞれに独自の参照画像があります。そのため、辞書に入れられて汎用キーが割り当てられています。これを強調するために質問を更新しました。 –

+0

私はこれをテストしました。私にとっては元のイメージの 'UriSource'の完全なPack URIで動作します。 – Clemens

答えて

0

Clemensは私に、実際の解決策に変わる可能性のあるアイデアを教えてくれました。

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}" /> 
関連する問題