Odpowiednik WPF DockStyle.Fill WinForms to:
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
Jest to ustawienie domyślne dla prawie kontrolek, więc generalnie nie musisz nic robić, aby formant WPF wypełnił swój kontener nadrzędny : robią to automatycznie. Dotyczy to wszystkich pojemników, które nie ściskają swoich dzieci do minimalnego rozmiaru.
Typowe błędy
Wyjaśnię teraz kilka typowych błędów, które uniemożliwiają HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
działanie zgodnie z oczekiwaniami.
1. Wyraźna wysokość lub szerokość
Jednym z typowych błędów jest jawne określenie szerokości lub wysokości kontrolki. Więc jeśli masz to:
<Grid>
<Button Content="Why am I not filling the window?" Width="200" Height="20" />
...
</Grid>
Po prostu usuń atrybuty Szerokość i Wysokość:
<Grid>
<Button Content="Ahhh... problem solved" />
...
</Grid>
2. Zawierający panel ściska kontrolę do minimalnego rozmiaru
Innym częstym błędem jest ściskanie panelu sterującego tak mocno, jak to tylko możliwe. Na przykład pionowy panel StackPanel zawsze będzie ściskał zawartość w pionie tak mała, jak tylko się da:
<StackPanel>
<Button Content="Why am I squished flat?" />
</StackPanel>
Zmień panel na inny i gotowe:
<DockPanel>
<Button Content="I am no longer squished." />
</DockPanel>
Ponadto każdy wiersz lub kolumna siatki, której wysokość jest ustawiona na „Auto”, podobnie ściśnie swoją zawartość w tym kierunku.
Oto kilka przykładów pojemników, które nie ściskają swoich dzieci:
- ContentControls nigdy nie ściskają swoich elementów podrzędnych (w tym Border, Button, CheckBox, ScrollViewer i wiele innych)
- Siatka z jednym wierszem i jedną kolumną
- Siatka z wierszami i kolumnami o rozmiarze „*”
- DockPanel nie ściska swojego ostatniego elementu podrzędnego
- TabControl nie ściska swojej zawartości
Oto kilka przykładów pojemników, które wyciskają swoje dzieci:
- StackPanel ściska się w kierunku orientacji
- Siatka z wierszem lub kolumną o rozmiarze „Auto” jest ściskana w tym kierunku
- DockPanel ściska wszystko oprócz ostatniego elementu podrzędnego w kierunku doku
- TabControl ściska swój nagłówek (co jest wyświetlane na karcie)
3. Wyraźna wysokość lub szerokość dalej
To niesamowite, ile razy widzę Grid lub DockPanel z określoną wysokością i szerokością, na przykład:
<Grid Width="200" Height="100">
<Button Content="I am unnecessarily constrainted by my containing panel" />
</Grid>
Ogólnie rzecz biorąc, nigdy nie chcesz nadawać żadnemu panelowi wyraźnej wysokości ani szerokości. Moim pierwszym krokiem podczas diagnozowania problemów z układem jest usunięcie każdej wyraźnej wysokości lub szerokości, jaką mogę znaleźć.
4. Okno to SizeToContent, kiedy nie powinno
Podczas korzystania z SizeToContent zawartość zostanie ściśnięta do minimalnego rozmiaru. W wielu zastosowaniach jest to bardzo przydatne i jest właściwym wyborem. Ale jeśli zawartość nie ma „naturalnego” rozmiaru, prawdopodobnie będziesz chciał pominąć SizeToContent.