19

是否可以将内容包装在一个中StackPanel

我知道我们可以使用 aWrapPanel来代替。但是出于修改代码的原因,我必须使用StackPanel.

那么,有没有办法StackPanel在说 5 件物品后将物品包装起来......谢谢!

4

6 回答 6

28

对我来说,一个简单的WrapPanel作品就好了:

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

不在一个StackPanel或任何其他容器内。在某些情况下,将Width设置为常数值可能会更好,因为将其绑定到ActualWidth可以防止缩小尺寸(例如,当父控件缩小尺寸时,WrapPanel 不会)

于 2016-12-12T17:14:16.567 回答
16

StackPanel创建包含所需数量项目的嵌套s。

在下面的示例中,您有两行,分别由元素占据<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>
于 2012-04-13T18:37:09.753 回答
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>
于 2012-04-13T22:30:32.363 回答
6

根据您的情况,您可以使用UniformGrid。也可以在此处找到一些示例。

您可以将其定义为像这样在 5 个项目之后包装。

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

但是,每个项目将获得完全相同的宽度,因此不确定这是否适合您。

于 2012-04-13T18:56:18.183 回答
0

我认为没有包装面板就无法做到这一点。也许您可以尝试在堆栈面板中放置一个 wrapPanel - 将其宽度设置为堆栈面板的实际宽度。你可以像这样绑定它Width="{Binding ActualWidth, ElementName=StackPanel1}"

但这只是一个技巧 - 我认为包装面板最适合您的需求。

于 2012-04-13T19:34:23.843 回答
0

我在按钮上放了一个堆栈面板。它不会影响按钮背景。然后在我使用的 VB 代码中Chr(12),表示换行:

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

您可以使用添加更多行Chr(12)

于 2019-02-02T16:11:41.460 回答