XAML水平对齐

XAML水平对齐,xaml,windows-phone-7,alignment,Xaml,Windows Phone 7,Alignment,我有一个关于WindowsPhone7XAML编程的问题 <StackPanel Orientation="Vertical" Width="110"> <Canvas Margin="0"> <TextBlock Text="{Binding Menesis}" Foreground="{Binding MyColor}"></TextBlock> </Canvas> <Canvas Ma

我有一个关于WindowsPhone7XAML编程的问题

<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,则对齐会出现问题,因为TextBlack将放置在画布控件内的0,0(左上角),并且(除非明确设置宽度)将被拉伸以适合包含的文本。这基本上意味着您的文本将始终保持左对齐

画布控件只应在需要设置所包含元素的确切位置时使用。如果情况并非如此,则使用另一个容器,例如网格、StackPanel,甚至仅使用ContentControl

从xaml中删除画布,它应该可以工作

要澄清水平对齐与文本对齐: 如果您有一个400px宽的ContentControl,并且在其中添加了一个设置为200px宽的TextBlock,其中文本内容为100px宽,则以下为真:

  • 将HorizontalAlignment设置为Center将使TextBlock(200px宽)与ContentControl的中间对齐,但文本仍将在TextBlock内左对齐。这意味着文本将从左侧偏移100px
  • 如果仅将TextAlignment设置为居中,则TextBlock将左对齐,但其中的文本将居中。这意味着文本将从左侧偏移50px

在我看来,这里的最佳实践是不设置任何宽度,只设置TextAlignment属性。这将意味着(对于大多数容器),TextBlock将被拉伸到容器的整个宽度,并且其中的文本将适当对齐。

如果您的TextBlock位于画布中,您将遇到对齐问题,因为TextBlack将被放置在画布控件内的0,0(左上)处,并且(除非您明确设置宽度)将拉伸以适合包含的文本。这基本上意味着您的文本将始终保持左对齐

画布控件只应在需要设置所包含元素的确切位置时使用。如果情况并非如此,则使用另一个容器,例如网格、StackPanel,甚至仅使用ContentControl

从xaml中删除画布,它应该可以工作

要澄清水平对齐与文本对齐: 如果您有一个400px宽的ContentControl,并且在其中添加了一个设置为200px宽的TextBlock,其中文本内容为100px宽,则以下为真:

  • 将HorizontalAlignment设置为Center将使TextBlock(200px宽)与ContentControl的中间对齐,但文本仍将在TextBlock内左对齐。这意味着文本将从左侧偏移100px
  • 如果仅将TextAlignment设置为居中,则TextBlock将左对齐,但其中的文本将居中。这意味着文本将从左侧偏移50px

在我看来,这里的最佳实践是不设置任何宽度,只设置TextAlignment属性。这将意味着(对于大多数容器),文本块将被拉伸到容器的整个宽度,其中的文本将适当对齐。

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


这样地。更多信息,无需使用画布。画布容器主要用于游戏设计目的。

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


这样地。更多信息,无需使用画布。画布容器主要用于游戏设计目的。

为什么要将文本块包装在画布中?画布仅适用于将控件定位在具有特定宽度和高度的特定X、Y坐标处。网格和StackPanel等控件设计用于根据可用区域控制其他控件的布局和大小…为什么要在画布中包装文本块?画布仅适用于将控件定位在具有特定宽度和高度的特定X、Y坐标处。网格和StackPanel等控件的设计目的是根据可用区域控制其他控件的布局和大小…它与网格完美配合!代码也变得更易于阅读,它与网格完美结合!代码也变得更具可读性
 HorizontalAlignment="Center"
TextAlignment="Center"