将内容包装在 StackPanel wpf 中
本文关键字:StackPanel wpf 包装 | 更新日期: 2023-09-27 18:31:14
是否可以将内容包装在StackPanel
中?
我知道我们可以利用WrapPanel
。但是出于代码修改的原因,我必须使用StackPanel
。
那么,有没有办法在说 5 件物品后将物品包装成StackPanel
包装......谢谢!
对我来说
,一个简单的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>