2011-11-18 162 views
0

我对Windows Phone 7 XAML编程有疑问。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(Binding Datums)文本居中?目前,它在右侧对齐和

HorizontalAlignment="Center" 

TextAlignment="Center" 

不起作用。

+1

你为什么要将你的TextBlocks包装在Canvases中?画布仅适用于在具有特定宽度和高度的特定X,Y坐标上定位控件。诸如Grids和StackPanels之类的控件可以根据可用区域来控制其他控件的布局和大小... – Will

回答

4

如果您的Canvas中有TextBlock,那么TextBlack将放置在画布控件中的0,0(左上角)处,并且(除非您明确设置宽度)将被拉伸到适合包含的文本。这基本上意味着您的文本将始终左对齐。

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

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

要澄清的Horizo​​ntalAlignment与TextAlignment: 如果你有一个ContentControl中是400像素宽,添加一个TextBlock它被设置为与文本内容就是100像素宽,再下面是真宽200像素:

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

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

+0

感谢您的回应,我会尝试使用网格 – Karloss

+0

它可以与网格完美配合!代码也变得更可读 – Karloss

0

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

< -----高度 - >

这样。更重要的是不需要使用画布。帆布容器主要用于游戏设计目的。

+0

我会用你的建议,谢谢 – Karloss