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

Eig*_*ite 34 wpf stackpanel

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

Pop*_*lin 46

像这样:

<StackPanel VerticalAlignment="Bottom">
    ...
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

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

  • 通过插入填充当然只有在代码中手动添加元素时才有效.我在这里开发了(在一些帮助下)一个可能对人们有用的ReversibleStackPanel:http://stackoverflow.com/questions/3428622/building-a-reversible-stackpanel-in-wpf (4认同)
  • 有一个类似的问题:从右到左填充通过设置`Horizo​​ntalAlignment ="Right"`. (2认同)

Nir*_*Nir 16

或者您可以将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>
Run Code Online (Sandbox Code Playgroud)

  • @chaiguy - 我认为你认为这是cpu密集型是错误的,因为:1.转换非常有效,2.它们只在重新计算布局时运行 - 如果这对性能(或cpu使用)有任何明显的影响,我会非常惊讶 (2认同)

JB.*_*JB. 8

另一种方法是使用DockPanel.

只需在DockPanel上将LastChildFill设置为false即可.

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

例如:

            var button = new Button();
            DockPanel.SetDock(button, Dock.Bottom);
Run Code Online (Sandbox Code Playgroud)

  • LastChildFill!我希望我之前知道这件事!为什么他们不只是有一个Dock.Fill我永远不会知道.把整个孩子当作填充的整体是荒谬的. (3认同)