ฉันกำลังทำงานกับการควบคุมแบบกำหนดเองที่มีพาเนลแบบกำหนดเอง และภายในพาเนลแบบกำหนดเอง ฉันมีเมธอด MeasureOverride
ขนาดเล็กและเรียบง่ายที่ส่งขนาด double.PositiveInfinity
ไปยังเมธอดลูก MeasureOverride
แผงแบบกำหนดเองควรดูแลเค้าโครง และควรทำให้ลูกใหญ่ขึ้นหรือเล็กลง ขึ้นอยู่กับขนาดหน้าต่าง
หากคุณจัดการกับการควบคุมแล้ว คุณควรรู้ว่าระบบเค้าโครง wpf ทำงานอย่างไร และโดยพื้นฐานแล้วเด็กทุกคนจะเรียก MeasureOverride ซึ่งเรียก MeasureOverride ของลูกของ childs และอื่นๆ
ตอนนี้ปัญหาคือเมื่อฉันปรับขนาดหน้าต่าง แผงแบบกำหนดเองจะได้รับแฟล็กเพื่อทำการวัดอีกครั้ง ดังนั้น MeasureOverride
จึงถูกเรียกอีกครั้ง แต่คราวนี้ในขณะที่ส่งขนาด double.PositiveInfitinty
ไปยังลูก ๆ ของมัน ลูก ๆ MeasureOverride
จะไม่ได้รับ เรียกว่าเลย (แต่ควรเรียกเมธอดตามคำจำกัดความของระบบโครงร่าง WPF) เหตุผลที่เป็นเช่นนั้น? ฉันคิดเสมอว่าเมื่อฉันเรียก MeasureOverride
กับผู้ปกครองว่าลูก ๆ จะถูกบังคับให้ทำการวัดด้วย
แน่นอนว่าฉันผิด ดังนั้นใครก็ได้ช่วยอธิบายฉันหน่อยว่าผู้ควบคุม/เด็กรู้ได้อย่างไรว่าเมื่อใดควรวัดอีกครั้ง
ยังไงก็ตาม ฉันกำลังส่งขนาด double.PositiveInfinity
ไปให้เด็กๆ เพื่อบอกให้พวกเขาใช้พื้นที่ให้มากที่สุดเท่าที่จำเป็น
รหัส:
protected override Size MeasureOverride(Size availableSize)
{
double x;
double y;
var children = this.InternalChildren;
for (int i = 0; i < children.Count; i++)
{
UIElement child = children[i];
child.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity);
y += child.DesiredSize.Height;
x = Math.Max(x, child.DesiredSize.Width);
}
return new Size(x, y);
}
รหัสเป็นเรื่องง่าย ฉันไม่เข้าใจว่าทำไมเด็กๆ ถึงไม่วัดอีกครั้ง และขออภัยหากฉันสะกดรหัสบางอย่างผิด
MeasureOverride
ของแผงที่คุณกำหนดเอง - person Benjamin Gale   schedule 08.02.2013