能否在StackPanel
中包装内容?
我知道我们可以使用 WrapPanel
。但出于代码修改原因,我必须使用StackPanel
。
那么,有没有一种方法可以让StackPanel
中的项目在5个项目后自动换行...谢谢!
能否在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>
每个项目的宽度都相同,因此不确定这是否适用于您。
我在按钮上放了一个StackPanel,它不会影响按钮的背景。然后在VB代码中,我使用了Chr(12)
来表示换行:
Button1.Content = "first line" + Chr(12) + "second line"
Chr(12)
添加更多行。我认为你不能没有WrapPanel实现它。也许你可以尝试在StackPanel内部放置一个WrapPanel-将其宽度设置为StackPanel的实际宽度。你可以像这样绑定它:Width="{Binding ActualWidth, ElementName=StackPanel1}"
但这只是一种hack方法-我认为WrapPanel最适合你的需求。
<ItemsControl>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
StackPanel
而不是WrapPanel
? - Rachel