2012-09-03 4 views
7

에 로컬 파일의 상대에 나는 다음과 같은 프로젝트 구조가 있습니다URI 예를 들어 조립

Root\Core\Application.exe 
Root\Modules\Assembly.dll 
Root\Modules\Icons\Icon.png 

내의 application.exe가 Assembly.dll를로드합니다. Assembly.dll에는 Image 컨트롤이있는 WPF UserControl이 포함되어 있습니다. Icon.png는 포함 된 리소스가 아니며 로컬 파일 (Build : Content)입니다.

나는 이미지 컨트롤의 소스 속성에 가능한 모든 URI를 시도하지만

어떻게 URI가 같이해야합니까 등

<Image Source="Icons\Icon.png" /> 
<Image Source="pack://application:,,,/Icons\Icon.png" /> 
<Image Source="pack://application:,,,/Assembly;component/Icons/Icon.png" /> 

:-(이미지를 표시하지?

답변

5

이 문장은 ... (응용 프로그램에서 지정된 때문에 전용 콘텐츠 파일 "응용 프로그램 : //"를 사용하여 해결할 수 있습니다) 당신이 당신의 조립의 콘텐츠 파일을 참조 할 수 없습니다 것을 의미한다.

그들은 은 WPF에 의해 지원되지 않는 때문에 참조 된 어셈블리에서

http://msdn.microsoft.com/en-us/library/aa970069(v=vs.85).aspx

컨텐츠 파일이 포함되어 있지 않습니다. 참조 된 어셈블리의 포함 파일에 대한 패키지 URI는 참조 된 어셈블리의 이름과; 구성 요소 접미사를 모두 포함하기 때문에 고유합니다. 사이트의 팩 URI는 siteoforigin : /// 권한을 사용하는 유일한 팩 URI 인 을 사용하기 때문에 고유합니다.

.exe가 실행되는 위치를 나타내는 "siteoforigin"이있을 수 있습니다.

Source="pack://siteoforigin:,,,/../Modules/Icons/Icon.png" 

하거나 상대 경로를 지원하지 않을 수도 있지만

Source="pack://siteoforigin:,,,/Icons/Icon.png" 

. 팩의 URI로 PackUriHelper를 사용하여 구축하는 것입니다 실험을 할 때 적당한에 부합하도록,

Source="Icons/Icon.png" 

하나의 팁 :

Source="../Modules/Icons/Icon.png" 

그리고이 :

이에게뿐만 아니라 주사를 구문/의미.

참조 일부 관련 게시물 :


또 다른 아이디어 ....

당신을 C ould는 자신의 MarkupExtension을 정의하여 PNG 파일에 대한 절대 경로를 구축하는 데 도움을줍니다.

LoadFrom으로 DLL을로드하기 직전에 설정된 전역 구성 설정이 필요합니다.

Source={local:MyMarkupExtensionPathBuilder Icon.png} 

사용이 출발점으로 ... 귀하의 경우에는 "응용 프로그램을 : //"를 사용하지 않으 :

그런 다음 당신은 당신의 XAML이 확장자를 사용 할 것하지만 ... 당신은 직선 절대 "파일"경로 유형 URI로 Uri를 만들고 싶습니다. "C : ₩ Program Files ₩ myapplication ₩ Root ₩ Modules ₩ Icons ₩ icon.png"를 누르십시오.

직접 BitmapSource는을 반환 (또는 어쨌든 다음 TypeConverter를가 BitmapSource는에 해결하는 ... 그것은 문자열을 반환받을) 당신의 MarkupExtension를 얻을 수 있습니다.

(변환기를 사용하여 경로의 두 부분을 연결하는 Binding과 유사한 작업을 수행하거나 ViewModel을 사용하면 연결을 수행 할 수 있습니다 ... markupextension은이를 수행하는 더 좋은 방법입니다)

+0

안녕하세요, 감사하지만, application.exe에서 XAML 파일 내의 어셈블리 경로까지의 상대 경로를 알 수 없습니다. 아마 "모듈"폴더가 다른 곳에 저장되어있을 수도 있습니다. 따라서 Assembly와 Icon.png 만 같은 폴더에 있고 Assembly의 UserControl에 Icon.png가 표시되어야합니다. 경로/URI는 XAML 코드에서 설정해야합니다. –

+0

이것은 작동하지 않습니다. 나는 당신이 나의 첫번째 지위에서 볼 수있는 것처럼 그것을 이미 시도했다. 그리고 물론 Icon.png가 올바른 폴더에 존재합니다 .-- 나는 수동으로 어셈블리를로드하는 것과 아무런 관련이 없습니다. 테스트 솔루션을 만들었 기 때문에 거기에 Application과 ClassLibrary가 있고 참조를 설정했기 때문에 ClassLibrary에 직접 추가하고 MainWindow.xaml의 ClassLibrary에서 UserControl을 직접 추가했습니다. 모든 것이 동일한 출력 폴더에 있습니다. URI는 UserControl 및 Icon.png (파일로)가 포함 된 어셈블리에 대한 상대 경로 여야합니다. –

+0

siteoforigin은 모든 것이 같은 폴더에있는 경우에만 작동합니다 (또는 응용 프로그램과 모듈 폴더 간의 상대 경로를 알 수 있습니다). Btw : Assembly.LoadFrom을 사용합니다. 어셈블리는 컴퓨터의 모든 곳에 저장할 수 있습니다. 그렇기 때문에 디자인 타임에 응용 프로그램에서 어셈블리로의 상대 경로를 알 수 없습니다. –