2009-11-04 3 views
8

Я создал этот рисунок в MS Word, и я пытаюсь реплицировать стиль в своем приложении WPF с помощью Документов. Сначала 'от':Документ WPF: Получение границ ячеек таблицы

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

Следующая моя попытка повторить:

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

Мой вопрос, вероятно, довольно очевидно. Что я делаю не так? Я не могу найти свойство заполнения в строке группировки или строки. Ниже мой код:

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

ответ

9

К сожалению, вы не можете установить границы для TableRow в FlowDocument. Он доступен только для Table или TableCell. Даже я удивляюсь, почему это не было предоставлено.

Хотя один способ достичь ряд эффект границы является использование границы всех клеток в сочетании с BorderThickness и установка CellSpacing контейнера Table 0. Для например:

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

Йогеш, извините за это поздний ответ, но я только что пришел к этому вопросу. Может быть, ответ может помочь другим.

В этом конкретном случае вам нужно установить таблицу.BorderThickness в 1, table.CellSpacing в 0 и верхнюю или нижнюю границу для каждой ячейки.

Чтобы избежать установки толщины (0,1,0,0) для каждой ячейки, вы можете использовать стили. Есть много способов сделать это, но я покажу вам простой. В вашем App.xaml напишите следующее:

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

После этого слияния словарь приложения в документ или таблицу, с чем-то вроде:

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

Вы можете иметь стили для всего документа, отдельную таблицу и даже отдельную строку или ячейку.

+0

Если ячейки имеют одинаковую высоту, то у вас есть проблемы – GorillaApe

Смежные вопросы