Горизонтальное выравнивание XAML - PullRequest
0 голосов
/ 18 ноября 2011

У меня вопрос по программированию XAML в Windows Phone 7.

<StackPanel Orientation="Vertical" Width="110">
    <Canvas Margin="0">
        <TextBlock Text="{Binding Menesis}" Foreground="{Binding MyColor}"></TextBlock>
    </Canvas>
    <Canvas Margin="0,12,0,0">
        <TextBlock Text="{Binding Datums}" Foreground="{Binding MyColor}" FontSize="85" HorizontalAlignment="Center" TextAlignment="Center"  />
    </Canvas>
    <Canvas Margin="0,105,0,0">
        <TextBlock Text="{Binding Nedelas_diena}" Foreground="{Binding MyColor}" />
    </Canvas>
</StackPanel>

Как сделать так, чтобы текст TextBlock (Binding Datums) центрировался?В настоящее время он выровнен по правой стороне и

 HorizontalAlignment="Center"

или

TextAlignment="Center"

не работает.

Ответы [ 2 ]

4 голосов
/ 18 ноября 2011

Если у вас есть TextBlock в Canvas, у вас будут проблемы с выравниванием, так как TextBlack будет помещен в 0,0 (верхний левый угол) внутри элемента управления canvas и (если вы не установили ширину явно) будет растянут, чтобы соответствоватьтекст содержал.В основном это означает, что ваш текст всегда будет выровнен по левому краю.

Элемент управления Canvas следует использовать только тогда, когда вам нужно установить точное положение содержащихся элементов.Если это не так, используйте другой контейнер, такой как Grid, StackPanel или даже просто ContentControl.

Удалите Canvas из вашего xaml, и он должен работать.

Чтобы уточнить горизонтальное выравнивание иTextAlignment: Если у вас есть ContentControl шириной 400px, и вы добавляете в него TextBlock шириной 200px с текстовым содержимым шириной 100px, то верно следующее:

  • УстановкаГоризонтальное выравнивание по центру будет выравнивать TextBlock (шириной 200 пикселей) по центру ContentControl, но текст все равно будет выравниваться по левому краю внутри TextBlock.Это означает, что текст будет смещен на 100 пикселей слева.
  • Если для TextAlignment установлено только Center, TextBlock будет выровнен по левому краю, а текст внутри будет центрирован.Это означает, что текст будет смещен на 50 пикселей слева.

По моему мнению, лучшая практика здесь - не устанавливать ширину, а просто установить свойство TextAlignment.Это будет означать (для большинства контейнеров), что TextBlock будет растянут на всю ширину контейнера, а текст внутри выровнен соответствующим образом.

0 голосов
/ 18 ноября 2011

Вместо использования стека панели и холста. либо вы можете использовать Grid. Если вы используете сетку, вы можете указать точное положение, в котором вам нужно разместить элемент управления. например,

<----- Высота ->

как это. Более того, нет необходимости использовать холст. Контейнер для холста используется в основном в игровых целях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...