39

我需要能够填充 astackpanelbuttons按钮必须首先出现在堆栈面板的底部并向上填充。这些按钮是动态创建的,并且数量不详,因此视觉黑客无法正常工作。我尝试过垂直对齐但无济于事。

4

7 回答 7

55

像这样:

<StackPanel VerticalAlignment="Bottom">
    ...
</StackPanel>

并且要向上填充按钮,您必须在位置 0 插入按钮,而不是添加它们。

于 2009-01-29T14:01:38.293 回答
17

或者您可以将 StackPanel 旋转 180 度以使按钮从底部堆叠到顶部,然后再将按钮旋转 180 度以使它们再次正面朝上:

<StackPanel>
    <!-- rotate all buttons inside this panel -->
    <StackPanel.Resources>
        <Style TargetType="Button">
            <Setter Property="LayoutTransform">
                <Setter.Value>
                    <RotateTransform Angle="180"/>
                </Setter.Value>
            </Setter>
        </Style>
    </StackPanel.Resources>

    <!-- rotate the stack panel -->
    <StackPanel.LayoutTransform>
       <RotateTransform Angle="180"/>
    </StackPanel.LayoutTransform>

    <!-- content -->
    <Button>1</Button>
    <Button>2</Button>

</StackPanel>
于 2009-12-17T12:17:56.620 回答
8

另一种选择是使用 DockPanel 代替。

只需在 DockPanel 上将 LastChildFill 设置为 false。

然后在添加到 DockPanel 之前将附加的 Dock 属性设置到要添加到底部的每个按钮。

例子 :

            var button = new Button();
            DockPanel.SetDock(button, Dock.Bottom);
于 2009-01-29T19:35:28.790 回答
4

解决问题的最佳方法是实现从 stackpanel 派生的自定义容器,但如果在运行时添加元素,则快速而肮脏的解决方案是

    public Window1()
    {
        InitializeComponent();
        for (int i = 0; i < 10; i++)
        {
            Button btn = new Button();
            btn.Content = "Button " + i;
            MyStack.Children.Insert(0, btn);
        }
    }

只需在 0 位置插入项目而不是添加它们。

于 2009-01-29T14:00:45.923 回答
2

尝试将 StackPanel 放入另一个容器(不是 StackPanel;可能是 DockPanel)并使其底部对齐。然后,当您填充按钮时,将每个新按钮放在第一个位置。

于 2009-01-29T14:01:29.667 回答
1

我发现使用 Column=1 的 UniformGrid 可以提供整洁的填充堆栈,或者设置 Rows=1 可以提供整洁的水平填充堆栈。从索引 0 添加将自下而上进行。

于 2009-12-17T05:14:52.217 回答
0

喜欢 Nir ​​的转换解决方案。我想知道是否可以使用转换来完成。

但是有一点需要注意:不要在基于 ScrollView 的控件(例如 ListBox)上使用转换技巧,因为滚动条操作将与内容相反。只要您不是最终用户,就很有趣。;>

于 2010-03-24T21:39:56.020 回答