2010-03-01 6 views
14

Ho un controllo ListView nella mia app WPF che è associato a una raccolta di attività da eseguire (elenco di cose da fare). Desidero che l'utente sia in grado di stampare il proprio elenco e di aver creato il seguente codice in base alle linee guida MSDN. (Questa è la mia prima incursione in stampa)Perché questa tabella di documento di flusso stampa sempre 2 colonne

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

Quando provo a stampare con il seguente codice ho sempre la mia pagina diviso a metà con 2 colonne (ognuna delle quali contiene le 3 colonne della tabella). Ho provato diversi valori di GridLength ma non ho avuto successo.

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

risposta

19

Immagino che il modo migliore per ottenere una risposta sia di arrendersi e chiedere, quindi lo trovi da solo.

Il problema era nella linea per stampare le pagine, non lo stesso flowdoc. Di default stampano con 2 colonne. Il codice corretto è (questo si occupa anche il margine e area di stampa):

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

} 

Tra l'altro ho trovato questo in di Matthew MacDonald "Pro WPF in C# 2008" che consiglio vivamente.

3

Grazie per le informazioni. Ho riparato semplicemente impostando il ColumnWidth come: flowDoc.ColumnWidth = pageSize.Width

FYI non mai cercare di ottenere aiuto da netframeworkdev o .Net Framework Sviluppare b/c non hanno mai buone risposte. Vorrei che il mio motore di ricerca mi indicasse StackOverflow invece di quel sito inutile. StackOverflow ha sempre le risposte. :) Grazie ancora.

(desidera si può solo bloccare i siti da sempre mostrare nei risultati della ricerca, si sa come si fa la prego di dirmi.)

+0

io non posso dirvi quante volte avrei voluto nascondere un sito dal mio risultati di ricerca. –

Problemi correlati