2011-02-01 6 views
4

私は、印刷しようとしている任意の数の列と行を含むDataTableを持っています。私が今までに持っていた最高の幸運は、データをテーブルに入れてからテーブルをFlowDocumentに追加することです。WPF - FlowDocument - 幅全体のストレッチテーブル?

これまでのところとても良いです。私が今持っている問題は、テーブルだけがドキュメントの幅の約半分を占めることを「望んでいる」ということです。私は既にFlowDocumentのPageWidthとColumnWidthプロパティに適切な値を設定していますが、テーブルは割り当てられた領域を埋めるために伸びたくないようです。

+0

私はFixedDocumentを使用してこの問題を解決しましたが、FlowDocumentの使用に関する洞察がある人は、まだ聞きたいと思います。 –

答えて

0

私は、このスペースで約90%しか占めていませんでしたが、How to set the original width of a WPF FlowDocumentと運が少しありました。

+0

実際、10%の未使用領域はFlowDocumentにPagePadding = "0.5in"を追加したためです。これは、印刷時にページが細かくならないようにするためです。 –

4

FlowDocumentのコンテンツを完全な利用可能なwidhに設定するには、まずページの幅を知る必要があります。コンテンツの長さを考慮して設定する必要のあるプロパティは、FlowDocumentの小文字であるColumnWidthです。

私は通常、ページ幅/高さとパディングの既知のプリセットを保持するために、 "PrintLayout"ヘルパークラスを作成します。 WouはMs Wordからプリセットをスニッフィングし、より多くを満たすことができます。

あなたがコードすることにより、プリセットXAML

<FlowDocument x:Class="WpfApp.MyPrintoutView" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:local="clr-namespace:WpfApp" 
     mc:Ignorable="d" 
     PageHeight="{Binding Height, Source={x:Static local:PrintLayout.A4}}" 
     PageWidth="{Binding Width, Source={x:Static local:PrintLayout.A4}}" 
     PagePadding="{Binding Margin, Source={x:Static local:PrintLayout.A4}}" 
     ColumnWidth="{Binding ColumnWidth, Source={x:Static local:PrintLayout.A4}}" 
     FontFamily="Segoe WP" 
     FontSize="16" ColumnGap="4"> 
     <!-- flow elements --> 
</FlowDocument> 

を設定することができ、あなたのFlowDocumentの

public class PrintLayout 
{ 
    public static readonly PrintLayout A4 = new PrintLayout("29.7cm", "42cm", "3.18cm", "2.54cm"); 
    public static readonly PrintLayout A4Narrow = new PrintLayout("29.7cm", "42cm", "1.27cm", "1.27cm"); 
    public static readonly PrintLayout A4Moderate = new PrintLayout("29.7cm", "42cm", "1.91cm", "2.54cm"); 

    private Size _Size; 
    private Thickness _Margin; 

    public PrintLayout(string w, string h, string leftright, string topbottom) 
     : this(w,h,leftright, topbottom, leftright, topbottom) { 
    } 

    public PrintLayout(string w, string h, string left, string top, string right, string bottom) { 
     var converter = new LengthConverter(); 
     var width = (double)converter.ConvertFromInvariantString(w); 
     var height = (double)converter.ConvertFromInvariantString(h); 
     var marginLeft = (double)converter.ConvertFromInvariantString(left); 
     var marginTop = (double)converter.ConvertFromInvariantString(top); 
     var marginRight = (double)converter.ConvertFromInvariantString(right); 
     var marginBottom = (double)converter.ConvertFromInvariantString(bottom); 
     this._Size = new Size(width, height); 
     this._Margin = new Thickness(marginLeft, marginTop, marginRight, marginBottom); 

    } 


    public Thickness Margin { 
     get { return _Margin; } 
     set { _Margin = value; } 
    } 

    public Size Size { 
     get { return _Size; } 
    } 

    public double ColumnWidth { 
     get { 
      var column = 0.0; 
      column = this.Size.Width - Margin.Left - Margin.Right; 
      return column; 
     } 
    } 
} 

次PrintLayoutのためのクラス

+1

ありがとう、それは私の多くを助けた。ちょっとした修正:A4用紙のサイズは21cm x 29.7cm、A3は29.7cm x 42cmです。 – solarc

関連する問題