指定的元素已经是另一个元素的逻辑子元素.首先断开它从用户控制打印多页 [英] Specified element is already the logical child of another element. Disconnect it first Printing multiple pages from user control
问题描述
视觉 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.
您的选择是:
错误消息中所述的列表项从显示它的视图中删除控件并打印出来
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屋!