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.
+1, super odpowiedź jak zawsze. –