水平排列的 StackPanel 填充父控件

13

在父容器(例如Window)中水平排列<StackPanel>或标签(或按钮等)并使其填充所有允许的空间,是否有可能?

例如,如果我有3个控件:

_ 窗口宽度__

[ 1 ]__ [ 2 ] __ [ 3 ]

或者有2个控件:

_ 窗口宽度__

[ 1 ]_______ [ 2 ]

在每种情况下,完整的窗口宽度都被利用,每个边缘控件分别左右对齐。


2
也许你可以使用一个Grid代替?使用Grid就可以实现这个功能。 - Vlad
所以您需要一个控件来水平均匀地排列其子元素?是这样吗? - Matt Burland
2个回答

31

StackPanel可以堆叠控件,所以答案是否定的。这不是StackPanel的设计目的。

你可以像Vlad建议的那样使用网格(Grid)。就像这样:

    <Grid HorizontalAlignment="Stretch">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="auto"/>
        </Grid.ColumnDefinitions>
        <Button Width="20" Height="20" Grid.Column="0"/>
        <Button Width="20" Height="20" Grid.Column="2"/>
        <Button Width="20" Height="20" Grid.Column="4"/>
    </Grid>

1
那么我需要动态管理为每个新条目添加一列并将每个控件放置在其自己的单元格中吗? - Ternary
1
在显示动态项目集合的情况下,您可能想考虑使用ListBox控件,并将其ItemPanel设置为UniformGrid。这可能接近您想要的效果,但我认为您不会在第一个和最后一个项目上获得左右对齐。 - Matt Burland

-6
        StackPanel m_pstackpanel = (StackPanel)this.Parent;
        m_pstackpanel.Children.Clear();
        keypadclasslist keypadWindow = new keypadclasslist(m_pLstReceiver);
        m_pstackpanel.Children.Add(keypadWindow);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接