//当前打印的行的索引,用于遍历ListBox.Items private int listPrintIndex; private void btnPrintList_Click(object sender, RoutedEventArgs e) { //初始值为0 listPrintIndex = 0; PrintDocument document = new PrintDocument(); document.PrintPage += new EventHandler<PrintPageEventArgs>(document_PrintPage); document.Print("Print List"); } //设置每一项之间的间距 private int extraMargin = 50; void document_PrintPage(object sender, PrintPageEventArgs e) { //定义一个打印的元素 Canvas printSurface = new Canvas(); e.PageVisual = printSurface; //获得最顶端位置 double topPosition = e.PageMargins.Top + extraMargin; //遍历当前的ListBox.Items while (listPrintIndex<lstPrint.Items.Count) { //实例化TextBlock用来存放ListItem的值 TextBlock txt = new TextBlock(); txt.FontSize = 30; //获得ListBox每一项的值 txt.Text = lstPrint.Items[listPrintIndex].ToString(); double measuredHeight = txt.ActualHeight; //若是打印的当前行高度不合适的话,则进行分页 if (measuredHeight>(e.PrintableArea.Height- topPosition- extraMargin)) { e.HasMorePages = true; return ; } //设置TextBlock在Canvas中的位置 txt.SetValue(Canvas.TopProperty, topPosition); txt.SetValue(Canvas.LeftProperty, e.PageMargins.Left + extraMargin); //将TextBlock添加到打印的元素中去 printSurface.Children.Add(txt); listPrintIndex++; //追加高度 topPosition = topPosition + measuredHeight; } e.HasMorePages = false; }