C# 从WPF画布打印时出错

C# 从WPF画布打印时出错,c#,wpf,canvas,printing,io,C#,Wpf,Canvas,Printing,Io,我将根据本教程学习如何执行此操作: 这是单击“我的打印”按钮时触发的方法: PrintManager _pm; private void btnPrint_Click(object sender, RoutedEventArgs e) { _pm = new PrintManager(); List<Canvas> pages = new List<Canvas>(); pages.Add(cnv); _pm.Print(pages);

我将根据本教程学习如何执行此操作:

这是单击“我的打印”按钮时触发的方法:

PrintManager _pm;
private void btnPrint_Click(object sender, RoutedEventArgs e)
{
    _pm = new PrintManager(); 
    List<Canvas> pages = new List<Canvas>();
    pages.Add(cnv);

    _pm.Print(pages);
}
原来问题行(
\u tempage.Children.Add(pages[i]);
)中有一个错误,它说:

指定的元素已经是另一个元素的逻辑子元素。先把它断开

知道为什么吗

甚至从
private List\u listOfPages中删除元素在添加到页面列表中之前,列表中只有一个画布没有帮助(当然我在for循环之外尝试了它)

另外,我需要它是多页的,因为我的文档通常很长(它是一个音乐乐谱)

另外,即使打印画布时没有手动添加子项,错误仍然是一样的

p.S.S.S.另一个更简单的算法,即使它不同,也是可以接受的。 谢谢。

在将画布内容发送到打印机之前,我似乎需要将画布内容“复制”到新的画布类中

从旧画布上清除它。有人能做得更好吗

    private const double PAGE_WIDTH = 793.92; //8.27' * 96px
    private const double PAGE_HEIGHT = 1122.24; //11.69' * 96px

    private FixedDocument _document;
    private List<FixedPage> _listOfPages;
    private PageContent _tempPageContent;
    private FixedPage _tempPage;

    public PrintManager()
    {

    }

    public void Print(List<Canvas> pages)
    {
        PrintDialog pd = new PrintDialog();
        Canvas temp;
        if (pd.ShowDialog() == true)
        {
            _document = new FixedDocument();
            _document.DocumentPaginator.PageSize = new System.Windows.Size(PAGE_WIDTH, PAGE_HEIGHT);

            _listOfPages = new List<FixedPage>();

            for (int i = 0; i < pages.Count; i++)
            {
                _listOfPages.Add(new FixedPage());
                _tempPage = _listOfPages[_listOfPages.Count - 1];
                _tempPage.Width = PAGE_WIDTH;
                _tempPage.Height = PAGE_HEIGHT;

                _tempPage.Children.Add(pages[i]); //THIS IS THE PROBLEM LINE

                _tempPageContent = new PageContent();
                ((IAddChild)_tempPageContent).AddChild(_tempPage);

                _document.Pages.Add(_tempPageContent);
            }

            pd.PrintDocument(_document.DocumentPaginator, "Docdoc");
        }
    }