Почему эта таблица flowdocument всегда печатает 2 столбца
У меня есть ListView в моем приложении WPF, которое связано с набором задач для выполнения (список дел). Я хочу, чтобы пользователь мог распечатать свой список и создал следующий код на основе рекомендаций MSDN. (Это мой первый набег на печать)
public FlowDocument GetPrintDocument()
{
FlowDocument flowDoc = new FlowDocument();
Table table = new Table();
int numColumns = 3;
flowDoc.Blocks.Add(table);
for(int x=0;x<numColumns;x++)
{
table.Columns.Add(new TableColumn());
}
GridLengthConverter glc = new GridLengthConverter();
table.Columns[0].Width = (GridLength)glc.ConvertFromString("300");
table.Columns[1].Width = (GridLength)glc.ConvertFromString("50");
table.Columns[2].Width = (GridLength)glc.ConvertFromString("50");
table.RowGroups.Add(new TableRowGroup());
table.RowGroups[0].Rows.Add(new TableRow());
// store current working row for reference
TableRow currentRow = table.RowGroups[0].Rows[0];
currentRow.FontSize = 16;
currentRow.FontWeight = FontWeights.Bold;
currentRow.Cells.Add(new TableCell(new Paragraph(new Run("Subject"))));
currentRow.Cells.Add(new TableCell(new Paragraph(new Run("Due Date"))));
currentRow.Cells.Add(new TableCell(new Paragraph(new Run("Urgency"))));
for (int i = 1; i < issues.Count+1; i++)
{
table.RowGroups[0].Rows.Add(new TableRow());
currentRow = table.RowGroups[0].Rows[i];
currentRow.FontSize = 12;
currentRow.FontWeight = FontWeights.Normal;
currentRow.Cells.Add(new TableCell
(new Paragraph
(new Run
(issues[i - 1].IssSubject))));
currentRow.Cells.Add(new TableCell
(new Paragraph
(new Run
(issues[i - 1].IssDueDate.Date.ToString()))));
currentRow.Cells.Add(new TableCell
(new Paragraph
(new Run
(issues[i - 1].IssUrgency.ToString()))));
}
return flowDoc;
}
Когда я пытаюсь выполнить печать с помощью следующего кода, я всегда разделяю мою страницу по середине с двумя столбцами (каждый из которых содержит 3 столбца таблицы). Я пробовал разные значения GridLength, но не имел успеха.
printDialog.PrintDocument(((IDocumentPaginatorSource)StatusBoardViewModel
.GetPrintDocument())
.DocumentPaginator
,"Flow Document Print Job");
Ответы
Ответ 1
Я думаю, лучший способ получить ответ - отказаться и спросить, тогда вы найдете его сами.
Проблема заключалась в том, чтобы печатать страницы, а не сам flowdoc. По умолчанию они печатаются с двумя столбцами. Исправленный код (это также касается поля и области печати):
PrintDialog printDialog = new PrintDialog();
if (printDialog.ShowDialog() == true)
{
FlowDocument flowDoc = statusBoardViewModel.GetPrintDocument();
flowDoc.PageHeight = printDialog.PrintableAreaHeight;
flowDoc.PageWidth = printDialog.PrintableAreaWidth;
flowDoc.PagePadding = new Thickness(25);
flowDoc.ColumnGap = 0;
flowDoc.ColumnWidth = (flowDoc.PageWidth -
flowDoc.ColumnGap -
flowDoc.PagePadding.Left -
flowDoc.PagePadding.Right);
printDialog.PrintDocument(((IDocumentPaginatorSource)flowDoc)
.DocumentPaginator,
"Task Manager Print Job");
}
Кстати, я нашел это в Matthew MacDonald "Pro WPF в С# 2008", который я очень рекомендую.
Ответ 2
Спасибо за информацию. Я исправил его, просто установив ширину столбца, как:
flowDoc.ColumnWidth = pageSize.Width
FYI никогда не пытается получить помощь от netframeworkdev или .Net Framework Develop b/c, у них никогда не бывает хороших ответов. Я бы хотел, чтобы моя поисковая система указала мне на StackOverflow вместо этого бесполезного сайта. У StackOverflow всегда есть ответы.:) Еще раз спасибо.
(Желаю, чтобы вы могли просто заблокировать сайты из когда-либо показываемых в результатах поиска, вы знаете, как это сделать, пожалуйста, скажите мне.)