2016-04-22 2 views
0

Я пытаюсь распечатать страницу текста из приложения UWP, но у меня проблема с выравниванием. Прежде всего, я создал страницу, которая содержит следующую XAML:Выравнивание TextBox при печати из UWP

<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); 
} 

И это, как он печатает:

enter image description here

Обратите внимание, что TextBlock не по центру ,

Однако, если я оберните TextBlock в границы, как это:

<Grid Background="White"> 
    <Border HorizontalAlignment="Center" VerticalAlignment="Center"> 
     <TextBlock Text="Welcome Printed World!" FontSize="36" Foreground="Black"/> 
    </Border> 
</Grid> 

Тогда это прекрасно:

enter image description here

Кто-нибудь может понять, почему TextBlock не центрирован при использовании оригинальный xaml?

+0

Дайте вертикальное выравнивание и горизонтальное выравнивание в центре сетки. – Archana

+0

Это сработало, но тогда у меня есть проблема, если я хочу, чтобы другие TextBlocks выровнялись в других местах, например, в нижнем правом углу, поэтому я думаю, что сетка должна заполнить страницу. Я обнаружил, что я могу использовать TextBox вместо TextBlock с BorderThickess 0, так что это просто текст на печатной странице. –

ответ

1

У меня возникла такая же проблема при обновлении с Windows 8.1 до проекта UWP.

При печати в UWP, то TextBlock.VerticalAlignment и TextBlock.HorizontalAlignment свойства не работают, как ожидалось.

Однако, если вы используете Run элемент вместо собственности TextBlock.Text, они, кажется, работает, как ожидалось:

<TextBlock FontSize="36" Foreground="Black" HorizontalAlignment="Center" VerticalAlignment="Center"> 
    <Run Text="Welcome Printed World!" /> 
</TextBlock> 

В качестве альтернативы вы можете использовать TextBlock.Margin для вертикального выравнивания и TextBlock.TextAlignment для горизонтального выравнивания.

Смежные вопросы