web-dev-qa-db-ja.com

Silverlight:StackPanelの残りのスペースにストレッチ

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>
    <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>
39
Randy Voet

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

40
James Cadd

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>
20
Mark Heath

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

この命令がコンテンツを必要最小限のスペースに圧縮する理由を理解できます。

<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>
15
Slug

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

2
BSalita