2016-11-28 1 views
0

아니요, 팩 URI에 관한 또 다른 질문이 아닙니다. :-)외부 리소스 DLL에 저장된 이미지

브랜딩 데이터를 저장하는 응용 프로그램 외부에 리소스 DLL이 있습니다. 그것은 (각 DLL에 대해 따라서, 노트 원본 이미지 파일 이름이 각 브랜드 다를 수 있음)의 ResourceDictionaryBitmapImage은 저장 : 주요 응용 프로그램에서

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

, 나는 그것에서 다양한 자원을 외부 DLL을 읽어 획득 공급 업체 로고를 inlcuding :이 VendorLogo 변수를 검토 할 때는

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

, 그것은 BitmapImage이 예상대로 포함되어 있습니다. 그래도 Image 컨트롤에 표시하고 싶을 때 :

Image.Source = VendorLogo; 

나는 아무것도 얻지 못합니다. 오류 메시지가 나타나지 않고 아무 것도 표시되지 않습니다.

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

및 XAML에서 사용하려고 :

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

나는 다른 많은과 같은 일을 내가 사용 내 자신의 사이에서 리소스를 넣어 경우

사실, 같은 일이 발생 리소스, 문자열, 색상 (실제로 응용 프로그램을 테마로), 모든 것은 작동하지만 이미지는 제외됩니다.

+0

당신은 무엇을 넣을 경우 UriSource = "pack : // application : ,,,/BrandDll; component/Resources/vendorname.png"와 같은 원본 URI의 어셈블리 이름을 반환합니다. – Clemens

+0

아니, 그래서 내가 시작한 문장으로 시작했다. :-) 나는 원래 이름을 모른다. 수백 가지의 서로 다른 브랜드 DLL이 있으며 각 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)); 

과 : 대신

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

의 우리는 원래의 이미지 이름을 얻고 그것을 사용하는 여러 단계의 프로세스를

<Image Source="{DynamicResource Logo}" /> 
관련 문제