2011-12-06 3 views
3

내 애플 리케이션에 대한 일반적인 도움말/정보를 표시하는 공통 WP7 어셈블리를 빌드 중이며, 각 애플 리케이션 어셈블리는 일부 애플 리케이션이있는 StackPanels 쌍을 지정합니다 특정 정보 (물론 Legal.xaml 및 WhatsNew.xaml이라고도 함).XamlReader.Load()에 의해로드되는 파일에서 ResourceDictionary를 성공적으로 참조했습니다.

이러한 앱 관련 XAML 파일은 HTTP 또는 포함 된 리소스 문자열로로드 할 수 있도록 일반 텍스트 형식 (코드로 인스턴스화 된 것) 이상이어야합니다.

일부 스타일 정의를 다른 파일로 분해 할 때까지 XAML을로드하면 XamlReader.Load()가 실패하고 "AboutAttributePagePage/CommonStyles.xaml 값이 범위를 벗어납니다. [선 : 43 위치 : 45] :

우리는 지금 사용자 지정 스타일을 포함하는 ResourceDictionary의로드를 시도하고 어디에서 찾을 수 (43)처럼 주위를 둘러 보면 Legal.xaml를로드 할 때 "

그 오류가 일어날 것

<StackPanel.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="AboutPageDocs/CommonStyles.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</StackPanel.Resources> 

여기에 버그가 있습니다 ... 단순히 & (런타임에 동적으로로드되는) StackPanel 코드를 붙여 넣은 다음 UserControl에 놓으면 잘됩니다.

둘 다 내 스타일을 인라인으로 정의하지 않아도됩니다. Legal.xaml & WhatsNew.xaml ... XamlReader.Load() 속성 조회 CommonStyles.xaml을 가질 수있는 방법이 있습니까?

원본 경로가 올바르지 않다고 생각하여 두 어셈블리를 통해 CommonStyles.xaml의 복사본을 여러 위치에 배치하려고했지만 pack : // uri 구문 ... all을 사용하여 실험했습니다. 지금까지 아무 소용이 없습니다.

무엇이 누락 되었습니까?

+0

가 왜 처음에'XamlReader.Load'를 사용 XamlReader.Load를 호출 할 때 나는 ParserContext에를 지정할 때이 나를 위해 일을 찾았나요? XAML없이 다시 사용할 수있는 컨트롤이 필요한 경우에는 C#에서 문서를 고쳐 써야합니다. –

+0

여기에도 같은 문제가 있습니다. 이상하게도 솔루션이 될 수없는 완벽한 절대 경로를 지정하면 충분합니다. 따라서 XamlReader는 상대 경로가 아닌 다른 XAML 파일에 대한 참조를 확인할 수 있습니다. – Seven

답변

1

XamlReader가 절대 경로로 지정되었을 때 참조 된 XAML 파일을 확인할 수 있음을 깨달았을 때 자신의 컨텍스트를 지정할 가능성을 찾았습니다.

나는()

public static FlowDocument ReadFlowDocument(FileInfo xamlFile) 
{ 
    // Specify a ParserContext. 
    // It's important to set BaseUri to the file itself 
    // not to its parent direcory! 
    ParserContext parserContext = new ParserContext(); 
    parserContext.BaseUri = new Uri(xamlFile.ToString()); 

    // Create a stream from this file 
    FileStream stream = new FileStream(xamlFile.ToString(), FileMode.Open); 

    // Let the XamlReader load and parse the XAML. It will resolve any referenced ResourceDirectories 
    // specified with a relative path 
    return (FlowDocument) XamlReader.Load(stream, parserContext); 
}