Saya sedang mengerjakan kontrol khusus yang memiliki panel khusus dan di dalam panel khusus saya memiliki metode MeasureOverride
kecil dan sederhana yang meneruskan ukuran double.PositiveInfinity
ke metode MeasureOverride
turunannya. Panel khusus harus mengatur tata letaknya dan harus membuat anak-anak lebih besar atau lebih kecil tergantung pada ukuran jendela.
Jika Anda telah berurusan dengan kontrol, Anda harus mengetahui cara kerja sistem tata letak wpf dan bahwa pada dasarnya setiap anak memanggil MeasureOverride yang memanggil MeasureOverride anak-anak anak-anak dan seterusnya.
Sekarang masalahnya adalah ketika saya mengubah ukuran jendela, panel khusus menerima tanda untuk melakukan pengukuran lagi sehingga MeasureOverride
dipanggil lagi tetapi kali ini ketika meneruskan ukuran double.PositiveInfitinty
ke anak-anaknya, anak-anak MeasureOverride
tidak mendapatkan dipanggil sama sekali (tetapi metode ini harus dipanggil sesuai dengan definisi sistem tata letak WPF). Mengapa demikian? Saya selalu berpikir ketika saya menelepon MeasureOverride
pada orang tua bahwa anak-anaknya juga akan dipaksa untuk melakukan tindakan tersebut.
Jelas saya salah, jadi bisakah seseorang menjelaskan kepada saya bagaimana seorang kontrol/anak mengetahui kapan harus mengukur lagi?
Ngomong-ngomong, saya memberikan ukuran double.PositiveInfinity
kepada anak-anak untuk memberitahu mereka agar mengambil ruang sebanyak yang diperlukan.
Kode:
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);
}
Kode itu sederhana. Saya tidak mengerti mengapa anak-anak tidak diukur lagi. Dan maaf jika saya salah mengeja sesuatu dalam kode.
MeasureOverride
panel khusus Anda. - person Benjamin Gale   schedule 08.02.2013