2010-03-01 7 views
14

Ich habe eine ListView in meiner WPF-App, die an eine Sammlung von Aufgaben gebunden ist (A to-do-Liste). Ich möchte, dass der Benutzer seine Liste drucken kann und basierend auf den MSDN-Richtlinien den folgenden Code erstellt hat. (Dies ist mein erster Ausflug in Druck)Warum druckt diese Flowdocument-Tabelle immer 2 Spalten

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

Wenn ich versuche, mit dem folgenden Code zu drucken Ich habe immer meine Seite in der Mitte mit zwei Spalten aufgeteilt nach unten (jeweils die drei Spalten der Tabelle enthalten). Ich habe verschiedene GridLength-Werte ausprobiert, hatte aber keinen Erfolg.

printDialog.PrintDocument(((IDocumentPaginatorSource)StatusBoardViewModel 
       .GetPrintDocument()) 
       .DocumentPaginator 
      ,"Flow Document Print Job"); 

Antwort

19

Ich denke, der beste Weg, um eine Antwort zu bekommen, ist aufzugeben und zu fragen, dann finden Sie es selbst.

Das Problem war in der Zeile zum Drucken der Seiten, nicht der Flowdoc selbst. Standardmäßig werden sie mit 2 Spalten gedruckt. Der korrigierte Code ist (dies befasst sich auch mit dem Rand und Druckbereich):

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

} 

Durch die Art, wie ich diese „Pro WPF in C# 2008“ ist in Matthew MacDonald gefunden, die ich sehr empfehlen kann.

3

Danke für die Info. Ich kann es fixiert, indem einfach die column wie Einstellung: flowDoc.ColumnWidth = pageSize.Width

FYI versuchen Sie nicht immer Hilfe von netframeworkdev oder .Net Framework zu bekommen entwickeln b/c sie nie gute Antworten haben. Ich wünschte, meine Suchmaschine hätte mich auf StackOverflow anstatt auf diese wertlose Website hingewiesen. StackOverflow hat immer die Antworten. :) Danke noch einmal.

(wünschen, dass Sie nur Websites blockieren könnte jemals in den Suchergebnissen zeigt, wissen Sie, wie das zu tun, erklären Sie mir bitte.)

+0

Ich kann Ihnen nicht sagen, wie häufig ich wünschte, ich hätte eine Website verbergen konnte von meiner Suchergebnisse. –