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");
}
}