2011-05-04 49 views
3

嘿家伙, 我试图配置一个TextBlock的TextAlignment,它是一个Canvas的子项。 我意识到在一个网格TextAlignment的作品,但是当你在画布上你不能 配置为中心。画布覆盖TextBlock内部的TextAlignment值

我真的很希望有人能够帮助解释这个话题!

感谢

回答

2

一个相对简单的解决方法是用一个宽度包裹在一个StackPanel你的TextBlock,与文本块的的Horizo​​ntalAlignment设置为中心。这会将文本居中在StackPanel中。

宽度是重要的部分。如果没有宽度,TextBlock不知道它有多少空间,因此不知道如何居中。

1

画布将始终将它的子元素作为“所需的大小”。所以如果你的TextBlock需要100个像素宽来显示它的文本,那么Canvas会给它100个像素。另一方面,网格可以给TextBlock留出更多或更少的空间,具体取决于TextBlock所在的列/行。

对于单行文本(即没有新行),TextAlignment唯一进入的时间是当TextBlock给出更多(或更少,如果启用TextWrapping)空间比它需要。

对于多行文本(或者在文本包装单行的情况下),则TextAlignment会将其文本与TextBlock的边界对齐。

由于Canvas永远不会强制一个TextBlock进行换行,所以TextAlignment唯一一次进入时会有多行文本。

<Canvas Width="300" Height="50"> 
    <TextBlock Canvas.Top="0" TextAlignment="Center"> 
     This will not center 
    </TextBlock> 
    <TextBlock Canvas.Top="25" TextAlignment="Center"> 
     This will center the shorter<LineBreak />lines of text 
    </TextBlock> 
</Canvas>