Silverlight:Page Visual - Element已经是另一个元素的子元素

时间:2014-03-05 11:03:23

标签: silverlight exception printing parent-child

我目前正在尝试打印一个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高度表单,并且打印页面为空白。

1 个答案:

答案 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元素