我有一个包含任意数量的列和行的DataTable,我正在尝试打印出来。到目前为止,我所拥有的最好的运气是将数据放入表中,然后将表添加到FlowDocument中。
到目前为止一切顺利。我现在遇到的问题是表只“想要”占据文档宽度的大约一半。我已经为FlowDocument的PageWidth和ColumnWidth属性设置了适当的值,但Table似乎不想拉伸来填充分配的空间?
答案 0 :(得分:5)
要将FlowDocument内容设置为完整的可用widh,您必须首先知道页面的宽度。您需要设置的属性来处理内容长度是FlowDocument上的 ColumnWidth 道具。
我通常会创建一个“PrintLayout”辅助类来保留Page width / hight和Padding的已知预设。你可以从Ms Word中获取预设并填写更多内容。
PrintLayout的课程
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;
}
}
}
您可以在FlowDocument的下设置预设
在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 result = new WpfApp.MyPrintoutView();
result.PageWidth = PrintLayout.A4.Size.Width;
result.PageHeight = PrintLayout.A4.Size.Height;
result.PagePadding = PrintLayout.A4.Margin;
result.ColumnWidth = PrintLayout.A4.ColumnWidth;
答案 1 :(得分:0)
我对此感到非常幸运:How to set the original width of a WPF FlowDocument,虽然它只占据了大约90%的空间。