WPF StackPanel如何从下到上垂直填充?

时间:2009-01-29 13:50:43

标签: wpf stackpanel

我需要能够使用stackpanel填充buttons按钮必须首先显示在堆栈面板的底部并向上填充。这些按钮是动态创建的,并且它们的数量未知,因此视觉上的hackery将无法正常工作。我尝试过垂直对齐,但无济于事。

7 个答案:

答案 0 :(得分:44)

像这样:

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

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

答案 1 :(得分:15)

或者您可以将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>

答案 2 :(得分:8)

另一种方法是使用DockPanel。

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

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

示例:

            var button = new Button();
            DockPanel.SetDock(button, Dock.Bottom);

答案 3 :(得分:3)

解决问题的最佳方法是实现从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位置而不是添加它们。

答案 4 :(得分:2)

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

答案 5 :(得分:1)

我发现使用带有Column = 1的UniformGrid会给出一个整齐的填充堆栈,或者设置Rows = 1会给出一个整齐的填充堆栈。从索引0添加将自下而上。

答案 6 :(得分:0)

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

但有一点需要注意:不要在基于ScrollView的控件(如ListBox)上使用转换技巧,因为滚动条操作将从内容中反转。只要你不是最终用户,热闹观看。 ;&GT;