指定的元素已经是另一个元素的逻辑子元素.首先断开它从用户控制打印多页 [英] Specified element is already the logical child of another element. Disconnect it first Printing multiple pages from user control

查看:48
本文介绍了指定的元素已经是另一个元素的逻辑子元素.首先断开它从用户控制打印多页的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

视觉 v 是我试图打印的用户控件中网格部分的一部分.我是 c# 新手,不完全确定为什么会出现此错误.这可能与xaml代码有关吗?

The visual v is part of a grid section within a user control that I ma trying to print. I am new to c# and am not entirely sure why I am getting this error. Could this be related to the xaml code?

private void Print( Visual v )
        {
            var pd = new PrintDialog();
            var document = new FixedDocument();
            var fixedPage = new FixedPage();
            //System.Windows.FrameworkElement e = v as System.Windows.FrameworkElement;
            //if( e == null )



Transform originalScale = fixedPage.LayoutTransform;
                //get selected printer capabilities
System.Printing.PrintCapabilities capabilities = pd.PrintQueue.GetPrintCapabilities( pd.PrintTicket );
System.Windows.Size sz = new System.Windows.Size( capabilities.PageImageableArea.ExtentWidth, capabilities.PageImageableArea.ExtentHeight );
fixedPage.Width = sz.Width;
fixedPage.Height = sz.Height;
// Add visual, measure/arrange page.
fixedPage.Children.Add((FrameworkElement)v);
fixedPage.Measure(sz);
fixedPage.LayoutTransform = new ScaleTransform( 0.2823293807641634 + 0.2498215560314061, 0.2823293807641634 + 0.2498215560314061 );
fixedPage.Arrange( new System.Windows.Rect( new System.Windows.Point( capabilities.PageImageableArea.OriginWidth, capabilities.PageImageableArea.OriginHeight ), sz ) );
fixedPage.UpdateLayout();
fixedPage.LayoutTransform = originalScale;
//var pageContent = new PageContent();
//((IAddChild)pageContent).AddChild(internalPage);
//document.Pages.Add(pageContent);


pd.PrintDocument(document.DocumentPaginator, "My Document");

            }

推荐答案

本质上这个错误表明 ui 元素已经被使用并且不能在另一个结构中使用 - 它只能有一个父元素.我从您的问题中收集到的信息,您正在尝试显示和打印相同的视觉元素.

Essentially this error states that ui element is already used and cannot be used in another structure - it can only have one parent. What I gathered form your question you are trying to do just that display and print the same visual element.

您的选择是:

  1. 错误消息中所述的列表项从显示它的视图中删除控件并打印出来

  1. List item as stated in error message remove control from view where it is displayed and print it

创建用于打印的视觉元素的新实例

create new instance of that visual element for printing

即使知道设置它可能需要更多工作,我还是建议使用第二个选项.

I suggest the second option even knowing it can be more work to set it up.

这篇关于指定的元素已经是另一个元素的逻辑子元素.首先断开它从用户控制打印多页的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆