2015-04-17 17 views
8

W moim oknie znajduje się siatka, która zajmuje 100% dostępnej przestrzeni pionowej. Wewnątrz tej siatki znajduje się StackPanel z innym StackPanel i Frame inside. Chciałbym, aby ta ramka przykleiła się do dolnej części rodzica StackPanel.Trzymaj się dolnej części StackPanel

<StackPanel> 
    <StackPanel> 
     //normal content 
    </StackPanel> 
    <Frame /> // should stick to the bottom 
</StackPanel> 

Tak, że, na przykład, gdy użytkownik zmienia rozmiar okna i siatki zyskuje wysokość, rama wewnątrz przykleja się do dna.

Próbowałem różnych rzeczy, używając VerticalAlign="Stretch" lub DockPanel i przypisywanie ramki DockPanel.Dock="Bottom", ale bez powodzenia. Byłbym wdzięczny za podpowiedź lub dwie. Nie potrzebuję StackPanel, aby być StackPanel, może to być również DockPanel.

+0

Proszę zaksięgować swój kod sieci i niech wie, jaką wysokość mają inne wiersze w tabeli ... –

Odpowiedz

15

A StackPanel nie jest prawidłowym Panel, który ma spełniać wymagania, ponieważ nie zapewnia takiego samego układu i funkcji zmiany rozmiaru, jak Grid. Dlatego po prostu zamień go na Grid, przekaż większą część przestrzeni na wewnętrzną StackPanel, a następnie Frame przyklei się do dna.

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 
    <StackPanel> 
     //normal content 
    </StackPanel> 
    <Frame Grid.Row="1" /> 
</Grid> 

Możesz dowiedzieć się więcej na temat różnych WPF Panel s na stronie Panels Overview na MSDN.

+0

Dziękuję bardzo! – peter

+0

@peter: Jeśli to możliwe, oznaczyć tę odpowiedź jako rozwiązanie :) – Ben

8

wygląda jak w przypadku użycia do DockPanel

<DockPanel> 
    <StackPanel> 
     <!--//normal content--> 
    </StackPanel> 
    <Frame DockPanel.Dock="Bottom"/> <!--// should stick to the bottom--> 
</DockPanel> 
+1

'DockPanel' to * nie * odpowiedni" Panel "do użycia w tej sytuacji, ponieważ są one ciężkimi kontrolkami, a ich funkcjonalność nie jest wymagana tutaj. Prosta 'Grid' będzie znacznie wydajniejsza. – Sheridan

+3

Trudno powiedzieć, czy DockPanel nie jest odpowiedni, nie znając przypadku użycia. Pozwolę, aby @Peter zdecydował. –

0

Według MSDN docs about StackPanel

StackPanel Układa elementów dziecko w jednej linii, które mogą być ustawiane poziomo lub pionowo.

Tak więc w twoim przypadku StackPanel nie jest odpowiednią kontrolą do użycia. Jeśli chcesz, aby kontrola była ustawiona na określonej pozycji, możesz użyć DockPanel i umieścić w niej kontrolę.

Powiązane problemy