2009-11-04 10 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

残念ながらあなたはFlowDocumentTableRowの境界線を設定することはできません。これはTableまたはTableCellでのみ利用可能です。なぜ私はこれが提供されなかったのだろうか。

行境界効果を達成する一つの方法はBorderThicknessと一緒にすべてのセルの境界を使用することであるが、そしてために、例えば0に容器TableCellSpacingを設定する:このために残念

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

ヨーゲッシュ、私はちょうどこの質問に到着しました。多分、その答えは他人を助けることができるでしょう。

この場合、table.BorderThicknessを1に、table.CellSpacingを0に、そして各セルのトップまたはボトムの境界線のいずれかに設定する必要があります。

各セルの厚みを(0,1,0,0)に設定しないように、スタイルを使用できます。これを行うには多くの方法がありますが、私はあなたに簡単なものを示します。 、その後

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

ようなもので、ドキュメントやテーブルにアプリケーション辞書をマージ:あなたのApp.xamlでは、以下の記述あなたが文書全体のスタイルを持つことができます

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

、個々のテーブル、さらには個々の行やセルにも適用されます。

+0

細胞が同じ高さでない場合は、問題があります – GorillaApe

関連する問題