Mengakses Kawalan dalam XAML DataTemplates: Panduan Praktikal
Mengakses kawalan secara langsung dalam XAML DataTemplates mengikut nama boleh menjadi rumit. Sifat dinamik DataTemplates, mencipta elemen dengan cepat, selalunya membawa kepada konflik penamaan. Untuk mengatasinya, kita perlu menavigasi pepohon visual—struktur hierarki semua elemen UI—menggunakan teknik seperti kelas VisualTreeHelper
.
Kaedah 1: Rekursif Visual Tree Traversal
Fungsi rekursif meneroka pepohon visual dengan cekap. Contoh ini menunjukkan kaedah AllChildren
untuk mencari semua kawalan kanak-kanak:
<code class="language-csharp">public List<Control> AllChildren(DependencyObject parent) { var children = new List<Control>(); for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++) { var child = VisualTreeHelper.GetChild(parent, i); if (child is Control control) { children.Add(control); } children.AddRange(AllChildren(child)); } return children; }</code>
Kaedah ini boleh mencari kawalan mengikut nama dalam pepohon visual. Contohnya, untuk mencari Image
bernama "img1" dalam item pilihan FlipView
:
MyFlipView.SelectedItem
bukan batal.var container = MyFlipView.ItemContainerGenerator.ContainerFromItem(MyFlipView.SelectedItem);
AllChildren(container)
untuk mendapatkan semua kanak-kanak.Image
dengan nama "img1".Kaedah 2: Memanfaatkan TemplatedParent
Sebagai alternatif, gunakan sifat TemplatedParent
untuk mengakses kawalan induk dari dalam DataTemplate. Pendekatan ini memerlukan kelas pembantu:
<code class="language-csharp">public class TemplatedControl<TControl> : ContentControl where TControl : FrameworkElement { public TemplatedControl(TControl control) { Content = control; } public TControl Child => (TControl)Content; }</code>
Kemudian, dalam Templat Data anda:
<code class="language-xaml"><datatemplate> <templatedcontrol x:Name="myImage"> <image ... /> </templatedcontrol> </datatemplate></code>
Kini anda boleh mengakses kawalan Image
melalui pembolehubah myImage
daripada kawalan induk.
Kedua-dua kaedah menyediakan penyelesaian untuk mengakses kawalan bernama dalam DataTemplates, menawarkan lebih kawalan ke atas UI terdorong data anda. Pilih kaedah yang paling sesuai dengan gaya pengekodan dan struktur projek anda.
Atas ialah kandungan terperinci Bagaimanakah saya Boleh Mengakses Kawalan dalam Templat Data XAML?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!