【问题标题】:How do I dynamically centre remaining stackpanel elements vertically when I hide items?隐藏项目时,如何将剩余的堆栈面板元素垂直居中?
【发布时间】:2014-03-05 13:20:48
【问题描述】:

假设我有一个带有两个文本块的堆栈面板,一个在另一个之上。它们水平居中。但是我想隐藏其中一个文本块,并且我希望剩余的项目根据剩余空间垂直居中(就好像它是唯一的项目一样)。这可能吗?

            <StackPanel Grid.Row="0" >
                <TextBlock Text="Testing!" HorizontalAlignment="Center" FontSize="35">
                </TextBlock>
                <TextBlock  Text="test" HorizontalAlignment="Center" FontSize="25">
                </TextBlock>
            </StackPanel>

【问题讨论】:

  • 您可以在堆栈面板中使用边框来实现此目的。说&lt;Stackpanel&gt;&lt;Border&gt; ... &lt;/Border&gt;&lt;/Stackpanel&gt;
  • 我认为您需要在此处向我们提供一些 XAML 来帮助您。通常,如果您“隐藏”某些东西(通过设置 Visibility = Visibility.Collapsed,布局将表现得好像它不存在一样。所以必须有其他事情发生。
  • 好的,添加了 xaml。好吧,我尝试了可见性折叠选项,但在预览窗口中,第一个文本框没有移动。只有当我在模拟器或设备上实际查看时才生效? - 在模拟器中尝试后编辑它没有任何区别。可见性崩溃没有影响
  • 当两个文本块都可见时,它真的垂直对齐吗?据我了解 StackPanel 将从顶部堆叠东西,因此两个文本块都应该从顶部垂直堆叠,并且“VerticalAlignment”不应该有任何效果。
  • 看来你是对的,垂直对齐不会影响stackpanel项

标签: c# xaml windows-phone-8


【解决方案1】:

据我所知,仅使用StackPanel 是无法实现的,相关问题:How can I vertically align a TextBox inside a StackPanel?

尝试将您的StackPanel 包装在一个固定高度的容器中(容器的高度与内容的高度无关)。然后将StackPanelVerticalAlignment 属性设置为Center 以使其(连同其内容)在父容器中居中。例如:

<Grid Height="100">
    <StackPanel VerticalAlignment="Center">
        <TextBlock Text="Testing!" FontSize="35"/>
        <TextBlock Text="test"/>
    </StackPanel>
</Grid>

【讨论】:

    猜你喜欢
    • 2011-06-19
    • 2011-12-24
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    相关资源
    最近更新 更多