Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将多个xaml元素序列化为单个xps文件并打印WPF应用程序c#_C#_Wpf_Xaml_Serialization_Xps - Fatal编程技术网

如何将多个xaml元素序列化为单个xps文件并打印WPF应用程序c#

如何将多个xaml元素序列化为单个xps文件并打印WPF应用程序c#,c#,wpf,xaml,serialization,xps,C#,Wpf,Xaml,Serialization,Xps,已经很长时间了,我还不能想出一个解决办法 我的应用程序包含十个带有格式化文本的堆栈面板。每个堆叠面板的高度为800,宽度为500。(想象一下写字板应用程序中有十页文字)。我的主要目标是打印堆栈面板内容。每个堆栈面板内容应准确显示在打印页面上。有十个堆叠面板,因此最终打印文档也应包含十页 到目前为止,我能够序列化xps文件中的任何一个堆栈面板并打印它 注意:其中一个堆栈面板名称为“spanel0” 我的代码: private void PrintDocument() { P

已经很长时间了,我还不能想出一个解决办法

我的应用程序包含十个带有格式化文本的堆栈面板。每个堆叠面板的高度为800,宽度为500。(想象一下写字板应用程序中有十页文字)。我的主要目标是打印堆栈面板内容。每个堆栈面板内容应准确显示在打印页面上。有十个堆叠面板,因此最终打印文档也应包含十页

到目前为止,我能够序列化xps文件中的任何一个堆栈面板并打印它

注意:其中一个堆栈面板名称为“spanel0”

我的代码:

private void PrintDocument() {
            PrintDialog pd = new PrintDialog();
            FrameworkElement fe = (spanel0 as FrameworkElement);
            fe.Measure(new Size(Int32.MaxValue, Int32.MaxValue));
            Size visualSize = fe.DesiredSize;
            fe.Arrange(new Rect(new Point(0, 0), visualSize));
            MemoryStream stream = new MemoryStream();
            string pack = "pack://temp.xps";
            Uri uri = new Uri(pack);
            DocumentPaginator paginator;
            XpsDocument xpsDoc;

            using (Package container = Package.Open(stream, FileMode.Create))
            {
                PackageStore.AddPackage(uri, container);
                using (xpsDoc = new XpsDocument(container, CompressionOption.Fast, pack))
                {
                    XpsSerializationManager rsm =
                      new XpsSerializationManager(new XpsPackagingPolicy(xpsDoc), false);
                    rsm.SaveAsXaml(spanel0);
                    paginator = ((IDocumentPaginatorSource)
                      xpsDoc.GetFixedDocumentSequence()).DocumentPaginator;
                    paginator.PageSize = visualSize;

                }
                PackageStore.RemovePackage(uri);
            }
        }
问题出在哪里?

我想将所有堆栈面板序列化为xps,这样当我打印xps文档时,我将得到十页的pdf文件。通过上面的代码,我可以将stackpanel中的任何一个序列化到xps并从中打印出来

希望你理解我的问题。请引导我。提前谢谢


注意:我剩下的堆栈面板是spanel1、spanel2、spanel3、spanel4、spanel5等等

最后经过大量挖掘,找到了解决方案

在WPF应用程序中,我们可以分别序列化多个xaml元素。所有序列化的xaml元素都将采用.xps格式。然后我们可以收集所有的.xps文件并形成一个.xps文件。这样,我们可以序列化多个xaml元素。谢谢