我试图从UWP应用程序打印一页文本,但我对齐问题。首先,我创建了一个包含以下xaml的页面:
<Grid Background="White">
<TextBlock Text="Welcome Printed World!" FontSize="36" Foreground="Black" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
注意TextBlock如何对齐以在网格中居中。
然后,我使用各种PrintDocument事件处理程序打印它;这是打印预览的代码(简化为忽略边距和不可打印区域):
Page printPage;
private void OnPrintDocumentPaginate(object sender, PaginateEventArgs e)
{
// Construct an instance of the page to print, and tell Windows that there is only 1 page
this.printPage = new PrintPage();
printDocument.SetPreviewPageCount(1, PreviewPageCountType.Final);
}
private void OnPrintDocumentGetPreviewPage(object sender, GetPreviewPageEventArgs e)
{
// Give Windows a reference to the page to print for preview
this.printDocument.SetPreviewPage(e.PageNumber, this.printPage);
}
这就是它打印的方式:
请注意,TextBlock未居中。
但是,如果我将TextBlock包装在边框中,如下所示:
<Grid Background="White">
<Border HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Text="Welcome Printed World!" FontSize="36" Foreground="Black"/>
</Border>
</Grid>
然后很好:
在使用原始xaml时,有人可以看到为什么TextBlock没有居中?
答案 0 :(得分:1)
从Windows 8.1升级到UWP项目时遇到了同样的问题。
在UWP中打印时, TextBlock.VerticalAlignment 和 TextBlock.HorizontalAlignment 属性无法按预期工作。
但是,如果您使用运行元素而不是 TextBlock.Text 属性,它们似乎按预期工作:
<TextBlock FontSize="36" Foreground="Black" HorizontalAlignment="Center" VerticalAlignment="Center">
<Run Text="Welcome Printed World!" />
</TextBlock>
或者,您可以使用 TextBlock.Margin 进行垂直对齐,使用 TextBlock.TextAlignment 进行水平对齐。