39

ButtonとListBoxの2つの要素を持つ垂直StackPanelがあります。ListBoxを残りのページの高さまで伸ばすにはどうすればよいですか?

<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

4 に答える 4

40

まあ、あなたはすでに解決策を見つけました;) StackPanels のサイズは、子要素の必要なサイズを合わせたものと常に等しいため、既定では残りのスペースは埋められません。ブラウザのサイズが変更されると動的にサイズが変更されるため、グリッドは優れた方法です。DockPanel を使用するというマークの答えもうまくいきます。他の唯一の方法は、親コントロールのサイズが変更されたときに要素のサイズを手動で変更することです。一般的に、外側のレイアウトには Grid を使用し、StackPanels やその他のコントロールでそれらを埋めると、設定する必要があります。

于 2009-07-07T12:19:14.937 に答える
20

を使用できますDockPanel。最初のアイテムをドッキング トップに、2 番目のアイテムをドッキング フィルに設定するか、次の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>
于 2009-07-07T10:38:20.397 に答える
15

「StackPanelsのサイズは常に子要素の合計必要サイズに等しいため、StackPanelsはデフォルトで残りのスペースを埋めない」というJamesの観察に同意します。それはまさに起こることですが、これは期待される結果ではありません。

この命令が内容を必要最小限のスペースに圧縮する理由がわかります。

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

ただし...StackPanelはHorizo​​ntalAlignment引数を受け入れます。これを選択すると、スタックパネルが親コンテナの内容を埋めるようになります。これは、Orientation="Vertical"を設定したときに発生することとまったく同じです。この場合、StackPanelが使用可能な水平方向のスペースの量を決定し、それを子コントロールに割り当てることに注意してください。

<StackPanel Height="30" Orientation="Vertical" HorizontalAlignment="Stretch" > 
   <TextBox /> <!--TextBox fills entire space-->
</StackPanel>

Orientation = "Horizo​​ntal"の場合にのみ、Horizo​​ntalの子のサイズ設定が機能しなくなります。

<StackPanel Height="30" Orientation="Horizontal" HorizontalAlignment="Stretch" > 
   <TextBox /> <!--TextBox fills smallest space available-->
</StackPanel>
于 2010-04-09T00:16:41.243 に答える
2

StackPanel の代わりに UniformGrid Columns="2" を使用します。

于 2012-01-18T13:34:55.950 に答える