[英]wrapping content in a StackPanel wpf
是否可以将内容包装在StackPanel
中?
我知道我们可以改用WrapPanel
。 但是出于修改代码的原因,我必须使用StackPanel
。
那么,有没有办法让StackPanel
中的物品在说 5 件物品后包装......谢谢!
对我来说,一个简单的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)
添加更多行。
对我来说,这是最好和最简单的解决方案。 设置 ItemsPanel 属性。
<ItemsControl>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.