2013-08-15 1 views
4

(핵심 부분으로 넘어 가기 전에 컨텍스트를 설정하고 싶습니다. .html 파일의 내용으로 WPF 프레임을로드하려고합니다. 내 프로젝트를 리소스로 포함하고 있습니다.)C# WPF 응용 프로그램에서 리소스에 액세스 (동일한 어셈블리)

새 WPF 응용 프로그램을 만듭니다. 'foofiles'라는 새 폴더를 프로젝트에 추가하고 그 폴더에 몇 개의 파일 (page1.foo 및 page2.foo)을 추가합니다.

각 새로 추가 된 .foo 파일에 대해 마우스 오른쪽 단추로 "속성"으로 이동하여 빌드 작업을 '리소스'로 설정하고 출력 디렉터리를 "항상 복사"로 설정하십시오.

<Frame x:Name="bar" Source="/foofiles/page1.foo"/> 

을 그리고 절차 적 코드 :

는 둘 다 XAML에서 해당 파일에 액세스 할 수있게하려면

private void someFunc() 
{ 
    bar.Source = new Uri("/foofiles/page1.foo"); 
} 

하지만이 작동하지 않는 이유는 단지 알아낼 수 없습니다 - "URI의 형식을 결정할 수 없습니다."라는 메시지가 나타납니다. 에서

코드는 숨김, 나는이 일을 시도 : 예외를 던져,하지만 내 메인 윈도우가 충돌하지 않았다

private void someFunc() 
{ 
    bar.Source = new Uri("pack://application:,,,/foofiles/page1.foo"); 
} 

.

제 생각에는 프로젝트에 어떤 유형의 파일을 추가하고 "Build Action"에서 "Resource"로 표시하면 위 예제에서 해당 파일을 사용할 수 있어야합니다. 또한이 파일을 다음과 같이 사용하고 싶습니다.

private void someOtherFunc() 
{ 
    System.IO.StreamReader reader = new System.IO.StreamReader("/foofiles/page1.foo"); 
    string bar = reader.ReadToEnd(); 
} 

어떤 도움을 주신다면 감사하겠습니다 ... 미리 감사드립니다! 의 AssemblyName이 어셈블리의 이름이

pack://application:,,,/AssemblyName;component/ResourceName 

처럼 팩 URI에 구성 요소 part의 추가

답변

7

보십시오. 따라서 귀하의 경우에, 다음과 같은 문이 작동합니다 :

bar.Source = new Uri("pack://application:,,,/AssemblyName;component/foofiles/page1.foo"); 

더 실질적으로, 상대적 팩 URI 표기 시도 : 스트림 읽기 자원

bar.Source = new Uri("AssemblyName;component/foofiles/page1.foo", UriKind.Relative)); 

var streamResourceInfo = Application.GetResourceStream(uri); 
using (var stream = streamResourceInfo.Stream) 
{ 
    // do fancy stuff with stream 
} 
+0

를 사용 또한 참고 팩 Uris는 WPF에만 한정되어 있으므로 _StreamReader_는이를 인식하지 못합니다. – mkoertgen

+0

응답 해 주셔서 감사합니다 ... 마지막 코드 조각은 읽기 리소스를 스트리밍하는 방법을 보여 주며 매력처럼 작동합니다! (불행하게도 Frame.Source를 로딩 할 때 사용하는 Uri을 만드는 두 가지 변형 모두 System.NotImplementedException을 System.dll에 제공합니다. 그러나 CLR 예외를 처리하는 방법을 알았고 그 문제를 실행하려고합니다. – Literata

+0

내 문제는 컨텍스트와 관련이있는 것으로 밝혀졌습니다. WPF는 html 파일 리소스에서 프레임을로드 할 수 없습니다. ('siteoforigin'을 사용하여 할 수 있습니다. 이는 어셈블리 외부에있는 파일에서 데이터를 가져 오는 것을 의미합니다.) 감사합니다. – Literata

관련 문제