Silverlight:伸展到StackPanel的剩余空间
我有一个垂直的StackPanel有两个元素:一个button和一个列表框。 我怎样才能让列表框伸展到剩余的页面高度?
<StackPanel Height="Auto" Width="Auto"> <Button Height="30" Width="100" Content="Get Content" x:Name="GetContent"/> <ListBox Height="Auto" Width="Auto" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/> </StackPanel>
请注意,我得到这个工作使用一个网格容器:
<Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Button Width="100" Height="30" Content="Get Content" Click="OnGetContent" Grid.Row="0" Grid.Column="0"/> <data:DataGrid x:Name="MyContent" Margin="0,5" Grid.Row="1" Grid.Column="0"/> </Grid>
那么,你已经find了解决scheme;)StackPanels默认情况下不会填充任何剩余的空间,因为它们的大小总是等于他们的子元素的合并所需的大小。 网格是一个很好的方法,因为它会dynamicresize,当浏览器大小的变化。 Mark的使用DockPanel的答案也很好。 唯一的其他方法是在父控件大小更改时手动调整元素的大小。 一般来说,坚持与外部布局网格,他们填补了StackPanels和其他控制,你应该设置。
你可以使用DockPanel
。 将第一个项目设置为停靠顶部,第二个项目停靠填充,或使用LastChildFill
属性:
<toolkit:DockPanel LastChildFill="True" xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit"> <Button DockPanel.Dock="Top" Height="30" Width="100" Content="Get Content" x:Name="GetContent"/> <ListBox Background="Azure" /> </toolkit:DockPanel>
我同意詹姆斯的观察:“StackPanels默认不会填充任何剩余的空间,因为它们的大小总是等于他们的子元素合并所需的大小”。 这正是发生的情况,但这不是预期的结果。
我明白为什么这个指令会将内容压缩到最小的必要空间。
<StackPanel Height="Auto" Width="Auto">
但是… StackPanel接受一个HorizontalAlignment参数 – 如果选中,应该使堆栈面板填充其父容器的内容。 这正是您设置方向=“垂直”时发生的情况。 请注意,在这种情况下,StackPanel将确定有多less水平空间可用并将其分配给子控件。
<StackPanel Height="30" Orientation="Vertical" HorizontalAlignment="Stretch" > <TextBox /> <!--TextBox fills entire space--> </StackPanel>
它只有当方向=“水平”,水平儿童尺寸分解。
<StackPanel Height="30" Orientation="Horizontal" HorizontalAlignment="Stretch" > <TextBox /> <!--TextBox fills smallest space available--> </StackPanel>
使用UniformGrid Columns =“2”而不是StackPanel。