2013-09-02 24 views
5

Ich muß mit in Stackpanel (Frame) letztem Elemente leeren Raum füllen:WPF Stackpanel vertikale Rahmen volle Höhe

<DockPanel> 
     <StackPanel Orientation="Vertical"> 
      <Frame NavigationUIVisibility="Hidden" Height="100" x:Name="_menu" /> 
      <Frame NavigationUIVisibility="Hidden" x:Name="_mainFrame" /> 
     </StackPanel> 
    </DockPanel> 

_mainFrame - Füllen leeren Raum von _Menu Rahmen an die Unterseite

Antwort

5

StackPanel ist nicht die Layout-Container, damit Elemente den verbleibenden Platz "füllen" können. StackPanel hat einen bestimmten Zweck unter anderen Layout-Containern. Es dient zum "Stapeln" von Objekten vertikal/horizontal und funktioniert basierend auf der von Kindern gewünschten Höhe, als es verfügbar ist. Es wird seinen Kindern ermöglichen, so viel Platz zu bekommen, wie sie wollen.

Für Ihre Anforderung möchten Sie entweder mit einem DockPanel/Grid gehen. Beide Steuerelemente ermöglichen es dem übergeordneten Container, die Dimension des untergeordneten Elements zu beschränken, je nachdem, was verfügbar ist.

In Ihrem Beispiel haben Sie bereits eine DockPanel. Wie auch immer, Sie haben eine StackPanel als Kind und es ist das einzige Kind, das macht nicht viel Sinn. Sie möchten versuchen, einen Layout-Container zu verwenden, wenn mehr als ein untergeordnetes Element in ein Layout eingefügt werden soll. In diesem Fall ist das StackPanel das einzige Kind der DockPanel.

Ihre Anforderung zu erhalten, indem ein DockPanel verwenden, können Sie mit,

<DockPanel> 
    <Frame NavigationUIVisibility="Hidden" Height="100" x:Name="_menu" DockPanel.Dock="Top" /> 
    <Frame NavigationUIVisibility="Hidden" x:Name="_mainFrame" /> 
</DockPanel> 

DockPanel verwenden standardmäßig LastChildFill="True" in der Erklärung somit das zweite Element wird gestreckt gehen könnten verbleibende Raum zur Verfügung zu füllen, das ist, was Sie brauchen . Wenn Sie diese Eigenschaft auf false festlegen, wird sie nicht gedehnt.

die gleiche Sache mit einem Grid zu tun:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <Frame NavigationUIVisibility="Hidden" Height="100" x:Name="_menu" /> 
    <Frame NavigationUIVisibility="Hidden" x:Name="_mainFrame" Grid.Row="1" /> 
</Grid> 

für Ihre Anforderung, würde ich mit dem DockPanel gehen bevorzugen, die Grid Methode ist nur etwas Gutes über und wahrscheinlich bewusst zu sein, verwenden, wenn die Situation verlangt es.

+0

+1, super Antwort wie immer. –