2013-09-02 10 views
5

muszę wypełnić pustą przestrzeń z ostatniego elementu w StackPanel (ramka):WPF StackPanel pionowe ramki pełnej wysokości

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

_mainFrame - napełnić pustą przestrzeń od _menu Ramki do dolnej

Odpowiedz

5

StackPanel nie jest Kontener układu umożliwiający elementom wypełnienie pozostałej przestrzeni. StackPanel ma określony cel wśród innych pojemników układu. chodzi o "ułożenie" przedmiotów w pionie/poziomie i działa w oparciu o pożądaną wysokość dzieci niż to, co jest dostępne. Pozwoli to dzieciom uzyskać tyle miejsca, ile pragną.

Dla twojego wymagania, chcesz iść z DockPanel//. Oba te elementy sterujące umożliwiają kontenerowi nadrzędnemu "ograniczenie" jego wymiaru dziecięcego w zależności od tego, co jest dostępne.

W twoim przykładzie masz już DockPanel. Jednak umieściłeś StackPanel jako dziecko i to jedyne dziecko, które nie ma większego sensu. Chcesz spróbować użyć kontenera układu, jeśli masz więcej niż jeden element podrzędny, aby umieścić go w układzie. W tym przypadku StackPanel jest jedynym dzieckiem z DockPanel.

Aby otrzymać wymóg przy użyciu DockPanel, można przejść z,

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

DockPanel domyślnie używa LastChildFill="True" zatem druga pozycja w deklaracji zostaną rozciągnięte, aby wypełnić pozostałą przestrzeń dostępna, który jest to, czego potrzebujesz . Jeśli ustawisz tę właściwość na wartość false, nie spowoduje to jej rozciągnięcia.

Aby zrobić to samo z Grid:

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

do Państwa wymagań, wolałbym pójść z DockPanel metoda Grid jest po prostu coś dobrego mieć świadomość na temat i prawdopodobnie użyć, gdy sytuacja tego wymaga.

+0

+1, super odpowiedź jak zawsze. –