2009-11-04 13 views
8

Ho creato questa immagine in MS Word e sto cercando di replicare lo stile nella mia app WPF utilizzando i documenti. In primo luogo la 'da':Documento WPF: ottenere la tabella Bordi della cella a destra

alt text http://img337.imageshack.us/img337/1275/correntborder.png

successivo il mio tentativo di replicare:

alt text http://img156.imageshack.us/img156/1711/extrawhiteborder.png

La mia domanda è probabilmente piuttosto evidente. Che cosa sto facendo di sbagliato? Non riesco a trovare una proprietà padding sul rowgrouping o sulla riga. Qui di seguito è il mio codice:

public override FlowDocument CreateDocumentSection(IInteractivityElement pElement) 
    { 
     var result = new FlowDocument(); 

     // show the header 
     result.Blocks.Add(CreateHeading(pElement.Header)); 

     // we don't show anything else if there aren't any columns 
     var nrColumns = pElement.GetIntegralData("CurrentColumnCount") ?? 0; 
     if (nrColumns == 0) return result; 

     Table mainTable = new Table(); 
     result.Blocks.Add(mainTable); 

     // columns 
     for (long tableIdx = 0; tableIdx < nrColumns; tableIdx++) 
     { 
      var newColumn = new TableColumn(); 
      mainTable.Columns.Add(newColumn); 
     } 

     // row group for header 
     TableRowGroup rowGroup = new TableRowGroup(); 
     mainTable.RowGroups.Add(rowGroup); 

     // row for header 
     TableRow headerRow = new TableRow(); 
     headerRow.Background = new SolidColorBrush(Color.FromRgb(79, 129, 189)); 
     headerRow.Foreground = new SolidColorBrush(Colors.White); 
     rowGroup.Rows.Add(headerRow); 

     // add columns for each header cell 
     for (long tableIdx = 0; tableIdx < nrColumns; tableIdx++) 
     { 
      var headerNameKey = CreateColumnNameKey(tableIdx); 
      TableCell headerCell = new TableCell(new Paragraph(new Run(pElement.GetStringData(headerNameKey)))); 
      headerRow.Cells.Add(headerCell); 
     } 

     TableRow emptyRow = new TableRow(); 
     emptyRow.Foreground = new SolidColorBrush(Colors.Gray); 
     rowGroup.Rows.Add(emptyRow); 

     TableCell emptyInstructionCell = new TableCell(); 
     emptyInstructionCell.BorderBrush = new SolidColorBrush(Color.FromRgb(79, 129, 189)); 
     emptyInstructionCell.BorderThickness = new Thickness(1.0); 
     emptyInstructionCell.ColumnSpan = Convert.ToInt32(nrColumns); 
     emptyInstructionCell.Blocks.Add(new Paragraph(new Run(pElement.Instruction))); 
     emptyRow.Cells.Add(emptyInstructionCell); 

     return result; 
    } 

risposta

9

Purtroppo si può impostare il confine per un TableRow in un FlowDocument. È disponibile solo per Table o TableCell. Anche io mi chiedo perché questo non è stato fornito.

Sebbene un modo per ottenere un effetto fila confine è di utilizzare bordo di tutte le cellule in combinazione con BorderThickness, e impostando CellSpacing del contenitore Table 0. Ad esempio:

table.CellSpacing = 0; 
... 
cellLeft.BorderThickness= new Thickness(1, 1, 0, 1); 
... 
cellCenter.BorderThickness= new Thickness(0, 1); 
... 
cellRight.BorderThickness= new Thickness(0, 1, 1, 1); 
5

Yogesh, pena per questo risposta tardiva ma sono appena arrivato a questa domanda. Forse la risposta può aiutare gli altri.

In questo caso particolare, è necessario impostare una tabella.BorderThickness su 1, table.CellSpacing su 0 e il bordo OR superiore o inferiore per ogni cella.

Per evitare di impostare lo spessore su (0,1,0,0) per ogni cella, è possibile utilizzare gli stili. Ci sono molti modi per farlo, ma ti mostrerò uno semplice. Nella tua App.xaml, scrivere il seguente:

<Application x:Class="YourNamespace.App" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:doc="clr-namespace:System.Windows.Documents;assembly=PresentationFramework"> 

    <Application.Resources> 
     <Style TargetType="doc:TableCell" > 
      <Setter Property="BorderBrush" Value="Blue" /> 
      <Setter Property="BorderThickness" Value="0,1,0,0" /> 
      <Setter Property="FontSize" Value="12" /> 
      <Setter Property="Padding" Value="2" /> 
     </Style>   
    </Application.Resources> 
</Application> 

Dopo di che, unire il dizionario dell'applicazione nel documento o un tavolo, con qualcosa di simile:

mainTable.Resources.MergedDictionaries.Add(App.Current.Resources); 

Si può avere stili per l'intero documento, una singola tabella e persino una singola riga o cella.

+0

se le celle non sono della stessa altezza, allora avete problemi – GorillaApe

Problemi correlati