WPF เทียบเท่ากับ DockStyle.Fill ของ WinForms คือ:
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. Window คือ SizeToContent เมื่อไม่ควรเป็น
เมื่อคุณใช้ SizeToContent เนื้อหาของคุณจะถูกบีบให้มีขนาดต่ำสุด ในหลาย ๆ แอปพลิเคชันนี้มีประโยชน์มากและเป็นทางเลือกที่ถูกต้อง แต่ถ้าเนื้อหาของคุณไม่มีขนาด "ธรรมชาติ" คุณอาจต้องละเว้น SizeToContent