我目前正在尝试打印一个Silverlight表单,但每次我尝试设置PageVisual说“元素已经是另一个元素的子元素”时我得到一个例外。我知道我无法更改给定控件的父级,但是这里我没有设置不同的父级,我只是设置PageVisual。是否有工作来打印我的控件?
以下是我的代码:
private void PrintOrExport(object sender, RoutedEventArgs e)
{
PrintDocument document = new PrintDocument();
Common.MDivDegreeReqNew mymdiv = scrllvwr.Content as Common.MDivDegreeReqNew;
document.PrintPage += (s, args) =>
{
Grid GridToBePrinted = new Grid();
GridToBePrinted.Height = 0;
if (mymdiv.LayoutRoot.RowDefinitions.Count == 0)
{
//break;
}
for (int i = 0; i < mymdiv.LayoutRoot.Children.Count; i++)
{
// if GridToBePrinted height + this rows height is less than the PrintableArea heigh
// then add this row to the gridtobeprinted.
if (GridToBePrinted.Height + mymdiv.LayoutRoot.RowDefinitions[i].ActualHeight < args.PrintableArea.Height)
{
Grid mygrid = new Grid();
mygrid =(Grid) mymdiv.LayoutRoot.Children[i];
//mymdiv.LayoutRoot.Children.Remove(mygrid);
GridToBePrinted.Children.Add(mygrid);
i--;
GridToBePrinted.Height += mygrid.ActualHeight;
if (mymdiv.LayoutRoot.Children.Count == 0)
{
args.PageVisual = GridToBePrinted;
break;
}
}
else
{
args.PageVisual = GridToBePrinted;
if (mymdiv.LayoutRoot.Children.Count > 0)
{
args.HasMorePages = true;
}
else
{
args.HasMorePages = false;
}
break;
}
}
};
document.Print(name+ " - MDiv Requirements");
编辑 - 代码已更新,此代码也会创建相同的异常。创建MDivDegreeReqNew的新实例而不是使用scrollview内容会生成0高度表单,并且打印页面为空白。
答案 0 :(得分:0)
尝试在布局根目录中添加网格,然后将要打印的控件添加到此网格中:
创建网格。
<Grid Margin="0,46,0,0" Name="PrintingRegion" Visibility="Visible" Height ="Auto" VerticalAlignment="Top" >
</Grid>
然后添加您要打印的UI元素
Printingregion.Children.add...
应用任何转换(如果需要)
PrintingRegion.RenderTransform = myTransformGroup
然后将您的页面设置为可视化打印
e.PageVisual = PrintingRegion
----编辑-----实际上我认为你遇到的问题是你的布局根有2个孩子,我想你只能在有一个孩子时设置页面视觉。如果需要同时打印标签和画布,请将它们包装在另一个画布中,然后将此画布添加到网格中。然后,您将拥有一个孩子,其中包含您需要的所有UI元素