将内容包装在 StackPanel wpf 中

本文关键字:StackPanel wpf 包装 | 更新日期: 2023-09-27 18:31:14

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

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

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

将内容包装在 StackPanel wpf 中

对我来说

,一个简单的WrapPanel就可以了:

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

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

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

在下面的示例中,您有两行,分别由 <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>
<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>

根据您的方案,您可以使用 UniformGrid。也可以在这里找到一些例子。

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

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

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

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

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

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

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

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

对我来说,这是最好和最简单的解决方案。设置"项目面板"属性。

    <ItemsControl>
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapPanel Orientation="Horizontal" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>