3

각 문서 내의 이미지 등을 포함하여 단일 패키지 내에 여러 FlowDocument를 저장할 수 있기를 원합니다. 그러나 Xaml FlowDocuments를 저장 (및로드)하는 데 사용한 방법 중 아무 것도이 기능을 사용할 수없는 것 같습니다. DataFormats.Xaml와PackagePart와 WPF FlowDocument를 직렬화 (이미지 등 포함)

  • TextRange.Save는 이미지 및 기타 포함 된 내용을 제거합니다
  • DataFormats.XamlPackage와 TextRange.Save가 내 부품으로 이미지를 오히려 문서를 치료하는 저를 허용하는 것보다, 완전히 새로운 패키지를 만들고 포함 패키지에 저장하고 싶습니다
  • XamlWriter는이 방법이 좋을 것 같습니다. 그러나 내가 처리하는 방법을 확실히 알고 있지만 포함 된 모든 개체를 찾는 방법을 알아낼 수는 없습니다. 일단 내가 그들을 발견했습니다). 다른 한편으로, 나는 모든 것을 나중에 적절하게로드하는 방법을 알지 못합니다.

FlowDocument 및 그 이미지 등을 PackagePart에 직렬화하는 일은 결코 쉽지 않습니다. 누구든지이 일을하는 좋은 방법을 알아 냈다면 어떻게 했어?

UPDATE 2011년 7월 3일 0시 22분 : XamlWriter 내가 PackageParts로, 자신의 이미지를 포함한 여러 FlowDocuments을 보유 할 수있는 행복한 작은 OPC 호환 패키지를 구축 할 수있었습니다 this question 일부 추가 코드를 사용. 내가하려고 아무리 문서를로드 할 수 있기 때문에 다른 방법을 (PackagePart에서 FlowDocument에) 실패 가고, 나는 XamlParseExceptions이 말해 얻을 System.Windows.Media.Imaging

'초기화'그. BitmapImage '가 예외를 던졌습니다.'

이제 관련 이미지를 제대로로드하려면 XamlReader.Load 및/또는 내 부품의 스트림을 어떻게 처리해야합니까?

답변

2

알아 냈어. Xaml 문서를 XamlReader로 전달하기 전에 Xaml 문서를 수동으로 처리하는 것이 솔루션입니다. 이미지 (및 자신의 PackagePart로 저장된 다른 요소)는 Uri 패키지를 포함하도록 BitmapImage.UriSource 속성을 설정해야합니다 (예 : /Content/Document.xaml의 "./Image1.png"는 "pack : // file : ,,, C :, Projects, Package.pak/Content/Image1.png "). 그러나

두 가지주의 사항 :

그러나 PackUriHelper.Create(Uri,Uri)에 문제가있다
  1. . 대신

    PackUriHelper.Create(packUri, part.Uri)) 
    

    을 사용하는 당신은 value 제거/초기와 part.Uri입니다

    new Uri(packUri.ToString() + value) 
    

    을 사용해야합니다. 위와 같이 적절한 Uri를 얻지 않고 패키지 파일 이름 뒤에 쉼표를 추가하면 XamlReader가 혼란스럽고 짜증을냅니다.

  2. XamlReader가 패키지를 열려고 시도 할 때 패키지를 열 때 FileShare.Read를 사용해야합니다. 기본적으로 Package.Open은 패키지를 여는 다른 사용자를 잠그고 XamlReader.Load는 패키지 자체에 들어갈 수없는 경우 WebException을 throw합니다.