XAML水平对齐

时间:2011-11-18 17:55:01

标签: xaml windows-phone-7 alignment

我对Windows Phone 7 XAML编程有疑问。

<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(绑定基准)文本居中?目前它在右侧对齐

 HorizontalAlignment="Center"

TextAlignment="Center"

不起作用。

2 个答案:

答案 0 :(得分:4)

如果在画布中有TextBlock,那么对齐会出现问题,因为TextBlack将放置在画布控件内的0,0(左上角),并且(除非您明确设置宽度)将被拉伸以适应包含的文字。这基本上意味着您的文本将始终保持对齐。

只有在需要设置包含元素的确切位置时才应使用Canvas控件。如果不是这种情况,那么使用另一个容器,如Grid,StackPanel,甚至只是一个ContentControl。

从xaml中移除Canvas,它应该可以正常工作。

澄清Horizo​​ntalAlignment与TextAlignment: 如果你有一个400px宽的ContentControl并且你添加一个TextBlock,它设置为200px宽,文本内容为100px宽,那么以下是真的:

  • 将Horizo​​ntalAlignment设置为Center将TextBlock(宽200px)与ContentControl的中间对齐,但文本仍将在TextBlock中保持对齐。这意味着文本将从左侧偏移100px。
  • 如果只将TextAlignment设置为Center,则TextBlock将左对齐,但内部文本将居中。这意味着文本将从左侧偏移50px。

在我看来,这里的最佳做法是不设置任何宽度,只需设置TextAlignment属性即可。这意味着(对于大多数容器),TextBlock将在容器的整个宽度和文本内进行适当的对齐。

答案 1 :(得分:0)

而不是使用堆栈面板和画布。要么你可以使用网格。如果您使用网格,则可以指出需要放置控件的确切位置。 例如,

&lt; -----身高 - &gt;

像这样。更多的是没有必要使用画布。画布容器主要用于游戏设计目的。