在一个StackPanel WPF包装内容

问题描述 投票:15回答:6

是否有可能来包装内容在StackPanel

我知道,我们可以使用一个WrapPanel代替。但是,对于代码修改的原因,我必须利用一个StackPanel的。

那么,有没有一种方法,使在StackPanel包裹的物品说5个项目后...谢谢!

c# wpf wpf-controls
6个回答
13
投票

创建包含的项目所需的数目嵌套StackPanels。

在下面的例子中,你有两行,分别由<StackPanel Orientation="Horizontal">元素,这反过来又分别包含五个项目将被横向并排显示的占用。

<StackPanel Orientation="Vertical">
    <StackPanel Orientation="Horizontal">
        <Item1 />
        <Item2 />
        <Item3 />
        <Item4 />
        <Item5 />
    </StackPanel>
    <StackPanel Orientation="Horizontal">
        <Item1 />
        <Item2 />
        <Item3 />
        <Item4 />
        <Item5 />
    </StackPanel>
</StackPanel>

14
投票

对我来说,一个简单的WrapPanel工作得很好:

<WrapPanel Orientation="Horizontal" Width="500" />

没有内StackPanel或任何其他容器。和宽度设定为恒定值可以优于IM一些情况下,因为它结合于ActualWidth的能够防止缩小尺寸(例如,当父控制缩小尺寸,WrapPanel不是)


9
投票
<StackPanel>
        <StackPanel.Style>
            <Style TargetType="{x:Type StackPanel}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type StackPanel}">
                            <WrapPanel/>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </StackPanel.Style>
    </StackPanel>

4
投票

根据你的情况下,你可以使用一个UniformGrid。有几个例子也可以找到here

你可以将其定义后5项这样的包裹。

<UniformGrid Columns="5">
 <Button />
 <Button />
 <Button />
</UniformGrid>

每个项目将,但是得到确切的宽度相同,所以不知道这是否会为你工作。


0
投票

我不认为你可以做到这一点没有一个包裹面板。也许你可以尝试把堆叠面板内wrapPanel - 它的宽度设置为堆栈面板的实际宽度。您可以绑定像Width="{Binding ActualWidth, ElementName=StackPanel1}"

但是,这将只是一个黑客 - 我想画布面板是最适合您的需求。


0
投票

我把一个StackPanel在按钮上。这不会影响按钮的背景。然后,在VB代码我用Chr(12),指示换行:

Button1.Content = "first line" + Chr(12) + "second line"

您可以添加使用Chr(12)更多的线路。

© www.soinside.com 2019 - 2024. All rights reserved.