当StackPanel的方向为水平时,WrapPanel不会自动换行。

17
在下面的示例中(WPF / XAML),标签会超出屏幕,不会换行。删除方向可以解决问题,但不能提供所需的功能/外观和感觉。有什么想法可以使WrapPanel根据StackPanel的当前大小自动换行?
<Window Height="300" Width="600">
    <StackPanel Orientation="Horizontal">
        <WrapPanel>
            <Label Height="28" Name="label1" Width="120">First Name</Label>
            <Label Height="28" Name="label2" Width="120">John</Label>
            <Label Height="28" Name="label3" Width="120">Last Name</Label>
            <Label Height="28" Name="label4" Width="120">Smith</Label>
            <!-- ...more labels!... -->
        </WrapPanel>
        <!-- ...other controls/panels... -->
    </StackPanel>
</Window>
2个回答

30
您可以将WrapPanelMaxWidth绑定到StackPanelActualWidth
我没有尝试过,但基本上是这样做: <WrapPanel MaxWidth="{Binding ActualWidth, ElementName=myStackPanel}"/>

看起来可以工作了,谢谢!问题是StackPanel中还有其他东西,它们的宽度没有被考虑在内。有什么处理方法吗? - derGral
也许你应该使用网格或DockPanel?或者你可以使用多绑定和绑定转换器来执行一些自定义逻辑。 - NotDan
13年后,谢谢。这对我今天有所帮助,而且它起作用了。 :D - codenamezero

9
你所做的事情是不可能的,因为 StackPanel 在进行水平布局时使用了算法。它基本上会询问每个子元素需要多大的空间,然后无论它要求多少空间,都会将其给予。
你需要做以下两种操作之一:
  1. WrapPanel 上设置 WidthMaxWidth
  2. 使用一个 WrapPanel 作为外部面板来替换 StackPanel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接