取出后我有UserControl
我像这样显示,它是在打印前预览收据票:重新呈现用户控件从容器
<ScrollViewer x:Name="xzScroll" Template="{StaticResource scrollView}" Height="488" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch">
<Border x:Name="xzPreview" BorderThickness="0" Background="White" Margin="0,0,10,0" Padding="15">
// The UserControl
</Border>
</ScrollViewer>
当用户想打印的收据,我删除在UserControl
从其父Border
,并尝试重新测量和重新安排控制根据printeable区域:
public void Print()
{
PrintDialog dlg = new PrintDialog();
this.Measure(new Size(dlg.PrintableAreaWidth, double.PositiveInfinity));
this.Arrange(new Rect(this.DesiredSize));
this.UpdateLayout();
dlg.PrintTicket.PageMediaSize = new PageMediaSize(this.ActualWidth, this.ActualHeight);
....
}
然而,Height
和Width
属性将不会瓒ge,从而导致打印错误,边距不齐,文字夹在两边。
当我创建的代码我UserControl
一个新实例,然后使用Measure
和Arrange
方法,我看到了Width
和Height
性质根据PrinteableAreaWidth
变化,导致正确接收票。
如何确保Width
和Height
属性正确设置?
我的'UserControl'只包含一些'Grids','ItemControls','TextBlock'等,没有硬编码边距或宽度/高度。这就是奇怪的原因,因为如果我只是在代码中渲染而不把'UserControl'放在'Border'中,那么所有东西都可以很好地展开。有任何想法吗? – DeMama 2015-02-06 09:42:46
你的'ScrollViewer'有一个确切的'Height'集合,这样就可以阻止'UserControl'重新调整大小。 – Sheridan 2015-02-06 10:16:27
我删除了所有可能的“Heights”和“Margins”。但不幸的是仍然没有运气:(猜猜我只是打印代码隐藏实例。 – DeMama 2015-02-06 10:32:50