WinForms의 DockStyle.Fill에 해당하는 WPF는 다음과 같습니다.
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
이것은 거의 컨트롤의 기본값이므로 일반적으로 WPF 컨트롤이 부모 컨테이너를 채우기 위해 아무것도 할 필요가 없습니다 . 자동으로 수행됩니다. 이것은 아이들을 최소 크기로 짜 내지 않는 모든 용기에 해당됩니다.
흔한 실수
이제 HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
예상대로 작동 하지 않는 몇 가지 일반적인 실수에 대해 설명하겠습니다 .
1. 명시적인 높이 또는 너비
일반적인 실수 중 하나는 컨트롤의 너비 또는 높이를 명시 적으로 지정하는 것입니다. 따라서 이것이 있다면 :
<Grid>
<Button Content="Why am I not filling the window?" Width="200" Height="20" />
...
</Grid>
너비 및 높이 속성을 제거하십시오.
<Grid>
<Button Content="Ahhh... problem solved" />
...
</Grid>
2. 패널을 포함하면 컨트롤이 최소 크기로 축소됩니다.
또 다른 일반적인 실수는 컨테 이닝 패널이 컨트롤을 최대한 꽉 쥐게하는 것입니다. 예를 들어 수직 StackPanel은 항상 내용물을 최대한 작게 수직으로 압축합니다.
<StackPanel>
<Button Content="Why am I squished flat?" />
</StackPanel>
다른 패널로 변경하면 좋습니다.
<DockPanel>
<Button Content="I am no longer squished." />
</DockPanel>
또한 높이가 "자동"인 그리드 행 또는 열은 마찬가지로 해당 방향으로 내용을 압축합니다.
아이들을 짜 내지 않는 용기의 몇 가지 예는 다음과 같습니다.
- ContentControls는 절대로 자식을 압착하지 않습니다 (여기에는 Border, Button, CheckBox, ScrollViewer 등이 포함됩니다)
- 단일 행과 열이있는 그리드
- "*"크기의 행과 열이있는 그리드
- DockPanel이 마지막 자식을 쥐지 않습니다.
- TabControl이 콘텐츠를 압축하지 않습니다.
아이들을 짜내는 용기의 몇 가지 예는 다음과 같습니다.
- StackPanel이 방향 방향으로 압착됩니다.
- "자동"크기의 행 또는 열이있는 그리드가 해당 방향으로 축소됨
- DockPanel은 마지막 자식을 제외한 모든 것을 도킹 방향으로 압착합니다.
- TabControl은 헤더를 압착합니다 (탭에 표시되는 내용).
3. 명시적인 높이 또는 너비
다음과 같이 명시적인 높이와 너비가 지정된 Grid 또는 DockPanel을 몇 번이나 보는지 놀랍습니다.
<Grid Width="200" Height="100">
<Button Content="I am unnecessarily constrainted by my containing panel" />
</Grid>
일반적으로 어떤 패널에도 명시적인 높이 또는 너비를 지정하고 싶지 않습니다. 레이아웃 문제를 진단 할 때의 첫 번째 단계는 찾을 수있는 모든 명시적인 높이 또는 너비를 제거하는 것입니다.
4. 윈도우는 안될 때 SizeToContent입니다.
SizeToContent를 사용하면 콘텐츠가 최소 크기로 압축됩니다. 많은 응용 프로그램에서 이것은 매우 유용하며 올바른 선택입니다. 그러나 콘텐츠에 "기본"크기가 없으면 SizeToContent를 생략 할 수 있습니다.