代码之家  ›  专栏  ›  技术社区  ›  Randy Voet

Silverlight:扩展到StackPanel中的剩余空间

  •  39
  • Randy Voet  · 技术社区  · 17 年前

    <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>
    
    4 回复  |  直到 15 年前
        1
  •  40
  •   James Cadd    17 年前

    好吧,你已经找到了解决方案;)默认情况下,StackPanels不会填充任何剩余空间,因为它们的大小始终等于其子元素的组合所需大小。网格是一种很好的方法,因为当浏览器大小发生变化时,它会动态调整大小。马克使用DockPanel的答案也很好。唯一的另一种方法是在父控件的大小更改时手动调整元素的大小。一般来说,通过,坚持使用网格作为外部布局,它们会用StackPanels和其他控件填充它们,你应该进行设置。

        2
  •  20
  •   George Birbilis Mark Heath    12 年前

    您可以使用 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>
    
        3
  •  15
  •   Slug    16 年前

    我可以理解为什么这条指令会将内容压缩到最小的必要空间。

    <StackPanel Height="Auto" Width="Auto">
    

    然而。..StackPanel接受一个水平对齐参数,如果选中该参数,堆栈面板将填充其父容器的内容。这正是当您将“方向”设置为“垂直”时发生的情况。请注意,在这种情况下,StackPanel将确定有多少水平空间可用,并将其分配给子控件。

    <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>
    
        4
  •  2
  •   BSalita    14 年前

    使用UniformGrid Columns=“2”代替StackPanel。