我有一个带有fixedDocument的DocumentViewer(在XAML中构建)然后我在代码中向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();
}
由于
答案 0 :(得分:2)
您应该只能将Document设置为null。
DocumentViewer dv;
dv.Document = null;
答案 1 :(得分:0)
由于您未将XPS加载到dv中,因此设置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();