2011-07-27 8 views
0

私はfixedDocument(XAMLで構築された)を持つDocumentViewerを持っています。次に、コード内のfixedDocumentにコンテンツを追加して、画面上に完全なものを表示します。DocumentViewerからFixedDocumentを削除するには?

私の問題は、fixedDocumentからXPSファイルを作成しようとしたときです。私は 'すでに別の要素の子です'というエラーが発生しました。

DocumentViewer.Children.Clearメソッドが見つかりません。ファイルを作成するためにfixedDocumentを削除/削除するにはどうすればよいですか?

public void CreateXPSFile() 
    { 
     // 1 - create xps_file   
     string OutputPath = baseDir + pathAdjust + "test.xps"; 
     using (FileStream fs = File.Create(OutputPath)) 
     { 
      ConvertToXps(fixedDocument, fs); 
     } 

     // open the document using the system default xps viewer 
     Process.Start(OutputPath); 
    } 

    public static void ConvertToXps(FixedDocument fd, Stream outputStream) 
    {   
     var package = Package.Open(outputStream, FileMode.Create); 
     var xpsDoc = new XpsDocument(package, CompressionOption.Normal); 
     XpsDocumentWriter xpsWriter = XpsDocument.CreateXpsDocumentWriter(xpsDoc); 

     // xps documents are built using fixed document sequences 
     var fixedDocSeq = new FixedDocumentSequence(); 
     var docRef = new DocumentReference(); 
     docRef.BeginInit(); 
     docRef.SetDocument(fd); 
     docRef.EndInit(); 
     ((IAddChild)fixedDocSeq).AddChild(docRef); <<<<<----- Error occurs here 

     // write out our fixed document to xps 
     xpsWriter.Write(fixedDocSeq.DocumentPaginator); 

     xpsDoc.Close(); 
     package.Close(); 
    } 

おかげ

答えて

2

あなただけnullに原稿をセットすることができるはずです。

は完全を期すため、ここでエラーになってイムは、コードです。

DocumentViewer dv; 
dv.Document = null; 
0

dvにXPSをロードしていないため、dv.Document = nullを設定しています。そのトリックをしないかもしれない。 Process.Start(OutputPath)ではなく、 xpsをdvにロードします。または、プロセスを名前に割り当てて、プロセスを閉じることができます。しかし、私は明示的にdvにロードします。

 System.Diagnostics.Process myProcess = new System.Diagnostics.Process(); 
     myProcess.StartInfo.FileName = "C:\\HelloWorld.exe"; 
     myProcess.StartInfo.CreateNoWindow = true; 
     myProcess.Start(); 
     // ... 
     myProcess.Close(); 
関連する問題