Canvas会覆盖其中TextBlock的TextAlignment值

时间:2011-05-04 13:35:02

标签: c# wpf wpf-controls

嘿伙计们, 我正在尝试配置TextBlock的TextAlignment,它是Canvas的子项。 我意识到TextAlignment在网格中有效,但是在Canvas中你不能 将其配置为中心。

我真的希望有人可以提供帮助,并对这个话题有所了解!

感谢

2 个答案:

答案 0 :(得分:2)

一个相对简单的解决方案是将TextBlock包装在具有宽度的StackPanel中,并将TextBlock的Horizo​​ntalAlignment设置为Center。这将使文本在StackPanel中居中。

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

答案 1 :(得分:1)

Canvas将始终为其子元素提供“所需大小”。因此,如果你的TextBlock需要100像素宽来显示它的文本,那么Canvas将给它准确的100像素。另一方面,Grid可以为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>