UIElement.Arrange(Rect) Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
public:
virtual void Arrange(Rect finalRect) = Arrange;
void Arrange(Rect const& finalRect);
public void Arrange(Rect finalRect);
function arrange(finalRect)
Public Sub Arrange (finalRect As Rect)
Parameter
- finalRect
- Rect
Ukuran akhir yang dihitung induk untuk anak dalam tata letak, disediakan sebagai nilai Rect .
Contoh
Contoh ini menunjukkan bagaimana Anda akan menggunakan Arrange dalam implementasi ArrangeOverride . Ide dasarnya adalah Anda harus mengkueri DesiredSize pada apa pun yang Anda coba panggil Atur sehingga Anda memiliki nilai untuk finalRect, kecuali implementasi tata letak Anda memiliki beberapa desain khusus yang mengubah atau mengabaikan ukuran yang diinginkan sebelum meneruskannya sebagai finalRect.
// Second arrange all children and return final size of panel
protected override Size ArrangeOverride(Size finalSize)
{
// Get the collection of children
UIElementCollection mychildren = Children;
// Get total number of children
int count = mychildren.Count;
// Arrange children
// We're only allowing 9 children in this panel. More children will get a 0x0 layout slot.
int i;
for (i = 0; i < 9; i++)
{
// Get (left, top) origin point for the element in the 3x3 block
Point cellOrigin = GetOrigin(i, 3, new Size(100, 100));
// Arrange child
// Get desired height and width. This will not be larger than 100x100 as set in MeasureOverride.
double dw = mychildren[i].DesiredSize.Width;
double dh = mychildren[i].DesiredSize.Height;
mychildren[i].Arrange(new Rect(cellOrigin.X, cellOrigin.Y, dw, dh));
}
// Give the remaining children a 0x0 layout slot
for (i = 9; i < count; i++)
{
mychildren[i].Arrange(new Rect(0, 0, 0, 0));
}
// Return final size of the panel
return new Size(300, 300);
}
'Second arrange all children and return final size of panel
Protected Overrides Function ArrangeOverride(ByVal finalSize As Size) As Size
'Get the collection of children
Dim mychildren As UIElementCollection = Children
'Get total number of children
Dim count As Integer = mychildren.Count
'Arrange children
'only allowing 9 children in this panel. More children will get a 0x0 layout slot.
Dim i As Integer
For i = 0 To 8
'Get (left, top) origin point for the element in the 3x3 block
Dim cellOrigin As Point = GetOrigin(i, 3, New Size(100, 100))
'Arrange child
'Get desired height and width. This will not be larger than 100x100 as set in MeasureOverride.
Dim dw As Double = mychildren(i).DesiredSize.Width
Dim dh As Double = mychildren(i).DesiredSize.Height
mychildren(i).Arrange(New Rect(cellOrigin.X, cellOrigin.Y, dw, dh))
Next
For i = 9 To count - 1
'Give the remaining children a 0x0 layout slot
mychildren(i).Arrange(New Rect(0, 0, 0, 0))
Next
'Return final size of the panel
Return New Size(300, 300)
End Function
'Calculate point origin of the Block you are in
Protected Function GetOrigin(ByVal blockNum As Integer, ByVal blocksPerRow As Integer, ByVal itemSize As Size) As Point
'Get row number (zero-based)
Dim row As Integer = CInt(Math.Floor(blockNum / blocksPerRow))
'Get column number (zero-based)
Dim column As Integer = blockNum - blocksPerRow * row
'Calculate origin
Dim origin As New Point(itemSize.Width * column, itemSize.Height * row)
Return origin
End Function
Keterangan
Panggilan Atur berpotensi mencapai implementasi ArrangeOverride dari kelas tertentu tersebut. Jika tidak, sebagian besar kelas FrameworkElement memiliki perilaku tata letak default implisit untuk Susun.
Komputasi penempatan tata letak awal dalam UI XAML terdiri dari panggilan Pengukuran dan panggilan Susun, dalam urutan tersebut. Selama panggilan Ukur , sistem tata letak menentukan persyaratan ukuran elemen menggunakan pengukuran availableSize . Selama panggilan Susun, sistem tata letak menyelesaikan ukuran dan posisi kotak pembatas elemen.
Saat tata letak pertama kali diproduksi, tata letak selalu memiliki panggilan Pengukuran yang terjadi sebelum Atur. Namun, setelah tata letak pertama berlalu, panggilan Atur dapat terjadi tanpa Pengukuran sebelumnya. Ini dapat terjadi ketika properti yang hanya memengaruhi Pengaturan diubah (seperti perataan), atau ketika induk menerima Pengaturan tanpa Pengukuran.
Panggilan Pengukuran akan secara otomatis membatalkan informasi Pengaturan apa pun. Pembaruan tata letak umumnya terjadi secara asinkron (pada satu waktu yang ditentukan oleh sistem tata letak). Elemen mungkin tidak segera mencerminkan perubahan pada properti yang memengaruhi ukuran elemen (seperti Lebar).
Pembaruan tata letak dapat dipaksa oleh kode aplikasi daripada mengandalkan perilaku sistem tata letak bawaan dengan menggunakan metode UpdateLayout . Namun, itu tidak disarankan. Biasanya tidak perlu dan dapat menyebabkan performa yang buruk jika digunakan secara berlebihan. Dalam banyak situasi di mana memanggil UpdateLayout dari kode aplikasi mungkin sesuai karena perubahan pada properti, sistem tata letak mungkin sudah memproses pembaruan. Sistem tata letak juga memiliki pengoptimalan untuk menangani perubahan tata letak kaskade melalui hubungan induk-anak, dan memanggil UpdateLayout dapat bekerja melawan pengoptimalan tersebut. Namun demikian, ada kemungkinan bahwa situasi tata letak ada dalam skenario yang lebih rumit di mana memanggil UpdateLayout adalah opsi terbaik untuk menyelesaikan masalah waktu atau masalah lain dengan tata letak. Cukup gunakan dengan sengaja dan hemat.