Frage

Ich habe eine vertikale Stackpanel mit zwei Elementen: einem Knopf und einem ListBox. Wie kann ich die ListBox strecken, um die verbleibende Seitenhöhe?

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

Beachten Sie, dass ich diese bekam einen Grid-Container arbeiten mit:

<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>
War es hilfreich?

Lösung

Nun, fand man die Lösung bereits;) StackPanels wird keine verbleibende Raum standardmäßig füllen, weil ihre Größe auf die kombinierte erforderliche Größe ihres Kindes Elemente immer gleich ist. Grid ist ein guter Weg zu gehen, weil sie dynamisch, wenn der Browser-Größe ändert die Größe werden. Mark Antwort eines DockPanel mit arbeitet auch in Ordnung. Die einzige andere Methode wäre, manuell die Elemente Größe, wenn die Größenänderungen der übergeordneten Steuerung. In der Regel durch, bleiben Grids für die äußere Gestaltung und sie füllen sie mit StackPanels und andere Steuerelemente und Sie sollten eingestellt werden.

Andere Tipps

Sie können eine DockPanel verwenden. Stellen Sie den ersten Punkt oben andocken und die zweite Füllung andocken, oder die LastChildFill Eigenschaft verwenden:

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

Ich bin damit einverstanden Beobachtung mit James', dass ‚StackPanels wird keine verbleibende Raum standardmäßig füllen, weil ihre Größe auf die kombinierte erforderliche Größe ihres Kindes Elemente immer gleich ist.‘ Das ist genau das, was passiert, aber das ist nicht das erwartete Ergebnis.

Ich kann sehen, warum dieser Befehl den Inhalt in den kleinsten notwendigen Raum komprimieren würde.

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

Allerdings ... Stackpanel übernimmt eine Horizontal Argument - die, wenn ausgewählt wird, sollte der Stapel-Display verursachen, den Inhalt ihrer übergeordneten Container zu füllen. Dies ist genau das, was passiert, wenn Sie Ausrichtung gesetzt = „Vertikal“. Beachten Sie, dass der Stackpanel in diesem Fall wird bestimmen, wie viel horizontaler Platz vorhanden ist und zugeordnet es um die untergeordneten Steuerelemente.

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

Es ist nur, wenn Orientation = "Horizontal", dass das horizontale Kind bricht eine Verkleinerung.

<StackPanel Height="30" Orientation="Horizontal" HorizontalAlignment="Stretch" > 
   <TextBox /> <!--TextBox fills smallest space available-->
</StackPanel>

Verwenden Uniform Columns = "2" anstelle von Stackpanel.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top