The labels in the example below (WPF/XAML) just parade off the screen, no wrapping occurs. Removing the orientation works, but doesn't provided the needed functiona开发者_运维知识库lity/look & feel. Any ideas how to make the WrapPanel
wrap to the current size of the 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>
You can bind the WrapPanel
's MaxWidth
to the StackPanel
's ActualWidth
.
I haven't tried this, but basically:
<WrapPanel MaxWidth="{Binding ActualWidth, ElementName=myStackPanel}"/>
What you're doing isn't possible because of the algorithm that StackPanel
uses when doing horizontal layout. It's basically going to ask each child element how big it wants to be and however much space it asks for it's going to give it.
You would either need to:
- Set a
Width
orMaxWidth
on theWrapPanel
. - Use a
WrapPanel
as the outer panel in place of theStackPanel
.
精彩评论