Как удалить FixedDocument из DocumentViewer? - PullRequest
0 голосов
/ 27 июля 2011

У меня есть DocumentViewer с fixedDocument (созданный в XAML), затем я добавляю контент в fixedDocument в коде, и он отлично отображается на экране.

Моя проблема в том, что когда я пытаюсь создать файл XPS из fixedDocument, я получаю ошибку «это уже дочерний элемент другого элемента».

Не могу найти метод 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 ]

2 голосов
/ 27 июля 2011

Вы должны иметь возможность установить для документа значение null.

DocumentViewer dv;
dv.Document = null;
0 голосов
/ 28 июля 2011

Так как вы не загружаете XPS в dv, установите dv.Document = null;может не справиться.Вместо Process.Start (OutputPath);загрузить XP в DVD.Или вы можете присвоить процессу имя, чтобы вы могли закрыть его.Но я бы явно загрузить в DV.

        System.Diagnostics.Process myProcess = new System.Diagnostics.Process();
        myProcess.StartInfo.FileName = "C:\\HelloWorld.exe";
        myProcess.StartInfo.CreateNoWindow = true;
        myProcess.Start();
        // ... 
        myProcess.Close();
...