//当前打印的行的索引,用于遍历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;
}