【问题标题】:Stick to the bottom of a StackPanel坚持到 StackPanel 的底部
【发布时间】:2015-06-24 06:49:08
【问题描述】:

在我的窗口中,有一个 Grid 占据了 100% 的可用垂直空间。在那个 Grid 里面是一个 StackPanel,里面有另一个 StackPanel 和一个 Frame。我想让那个 Frame 贴在父 StackPanel 的底部。

<StackPanel>
    <StackPanel>
       //normal content
     </StackPanel>
     <Frame /> // should stick to the bottom
</StackPanel>

因此,例如,当用户调整 Window 的大小并且 Grid 获得高度时,内部的 Frame 会粘在底部。

我尝试了各种方法,使用 VerticalAlign="Stretch" 或 DockPanel 并将 Frame 分配给 DockPanel.Dock="Bottom",但没有成功。我会很感激一两个提示。我不需要 StackPanel 是 StackPanel,它也可以是 DockPanel。

【问题讨论】:

  • 请发布您的网格代码,并告知网格中其他行的高度...

标签: wpf


【解决方案1】:

根据MSDN docs about StackPanel

A StackPanel 将子元素排列成可以定向的单行 水平或垂直。

因此,在您的情况下,StackPanel 不是正确使用的控件。如果您希望您的控件固定在特定位置,您可以使用DockPanel 并将您的控件放在其中。

<DockPanel>
        <Frame DockPanel.Dock="Bottom"/>
</DockPanel>

【讨论】:

    【解决方案2】:

    看起来更像是DockPanel 的用例

    <DockPanel>
        <StackPanel>
            <!--//normal content-->
        </StackPanel>
        <Frame DockPanel.Dock="Bottom"/> <!--// should stick to the bottom-->
    </DockPanel>
    

    【讨论】:

    • DockPanel适合在这种情况下使用 Panel,因为它们是重量级控件,并且此处不需要它们提供的功能。一个简单的Grid 会更有效率。
    • 在不知道用例的情况下很难说 DockPanel 是否合适。我会让@Peter 决定。
    • @Sheridan DockPanel 实际上提供的功能比 Grid 少,但性能更好:stackoverflow.com/a/9996707/1988326
    • 该列表不是一个有序列表,也没有考虑到像我们在这里讨论的那样简单的布局。 Grid 控件的耗时部分来自复杂的 ColumnDefinitionRowDefinition 设置,以及它的星形大小调整功能。与往常一样,这取决于它的使用方式。
    【解决方案3】:

    StackPanel 不是满足您要求的正确 Panel,因为它们不提供与 Grid 相同的布局和调整大小功能。因此,只需将其替换为Grid,将大部分空间留给内部StackPanel,然后Frame 将粘在底部。

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="Auto" />   
        </Grid.RowDefinitions>
        <StackPanel>
           //normal content
         </StackPanel>
         <Frame Grid.Row="1" />
    </Grid>
    

    您可以在 MSDN 上的 Panels Overview 页面中找到有关不同 WPF Panels 的更多信息。

    【讨论】:

    • @peter:如果可能,将此答案标记为解决方案:)
    猜你喜欢
    • 1970-01-01
    • 2012-08-22
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多