【问题标题】:Align text vertical and horizontal center in stack panel?在堆栈面板中对齐文本垂直和水平中心?
【发布时间】:2012-06-29 13:28:56
【问题描述】:

我正在尝试在 Listview 中的堆栈面板中垂直和水平居中对齐文本块,但我只能使文本垂直居中而不是水平居中。另外,文本没有被换行。这是我尝试过的代码:

 <ListBox Name="lstTiles" Margin="12,0,-12,0" Grid.Row="1" SelectionChanged="lstTiles_SelectionChanged">
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <toolkit:WrapPanel/>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Background="{StaticResource PhoneAccentBrush}" Width="145" Height="80" Margin="8,8,0,0" Orientation="Vertical" >
                    <TextBlock Text="{Binding Name}" Tag="{Binding ID}" Style="{StaticResource PhoneTextNormalStyle}" FontSize="15" TextWrapping="Wrap" TextAlignment="Center" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

如何实现文本垂直、水平和文本换行?

【问题讨论】:

    标签: silverlight windows-phone-7 windows-phone-7.1


    【解决方案1】:

    看起来由于您将 StackPanel 的方向设置为水平,因此您将文本块彼此相邻而不是彼此重叠。由于 StackPanel 元素采用其子元素的大小,因此您可以将其可视化为水平的、并排的文本块列表。由于每个文本块都采用其中文本的大小,因此您将看到宽度不同的块,因此水平居中不会产生任何影响。

    您可以使用边距(很痛苦)来实现相等的宽度。我不推荐这个。

    您还可以在堆栈面板中放置设置宽度的网格,并将文本块放在网格上。您也许可以设置文本块的宽度以获得正确的效果,但我目前无法对此进行测试,我不记得它是否会导致文本拉伸。

    对于文本换行,我假设您是在文本块中讨论的,这很简单 - 只需将文本块的 TextWrapping 属性设置为 Wrap。

    尝试在列表框项上设置 Horizo​​ntalContentAlignment 和 VerticalContentAlignment 属性。我现在没有我的开发计算机,所以我无法进行实验,但这里有一个帖子可能会对您有所帮助:Silverlight 3: ListBox DataTemplate HorizontalAlignment。查看前两个答案,看看哪一个对您的情况最有帮助,当然,用 center 代替 left、top 或 stretch。

    【讨论】:

    • 嗨,在我的代码中,我已经编写了 textwrap 属性,但是当我将堆栈面板方向设置为垂直时它不起作用
    • 所以您的标记现在与上面不同了?堆栈面板上方的方向是水平的。如果不同,请发布新标记。文本是否超出了堆栈面板的一侧?尝试在文本块上设置 maxwidth,然后查看它是否换行。你期待滚动行为吗?堆栈面板不会滚动。如果要滚动,请将堆栈面板放在滚动查看器中,然后删除 height 属性。
    • 是的,我已经更新了上面的 UI 代码,并且在呈现此代码时将出现的 UI 就像一个小方块,每个相邻的盒子都包含不同长度的文本。所以现在的问题是文本被包裹并且水平居中对齐但垂直我无法居中对齐,如果我为不同长度的不同文本放置边距,我无法完全居中对齐。
    • 啊 - 不知道为什么我之前没有注意到这一点.... 在堆栈面板中考虑了多个项目,出于某种原因没有将其视为模板。因此,即使它们在文本块中居中,列表框中的项目也不会彼此水平居中。这是因为每个列表框项中都有一个堆栈面板。它们都是不同的宽度。请参阅上面我编辑的答案以获取可能对您有所帮助的链接。
    猜你喜欢
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 2017-06-21
    • 2011-07-25
    • 1970-01-01
    相关资源
    最近更新 更多