Bekerja dengan kawalan yang dibenamkan dalam XAML DataTemplates, terutamanya dalam bekas seperti FlipView
memaparkan berbilang item data, memberikan cabaran yang unik. Mengakses terus kawalan ini mengikut nama adalah bermasalah kerana kemungkinan konflik penamaan. Panduan ini menyediakan penyelesaian yang mantap.
Isu teras terletak pada hakikat bahawa setiap item data dalam FlipView
(atau bekas serupa) menjana contoh DataTemplate sendiri, yang berpotensi mencipta nama kawalan pendua. Oleh itu, carian mudah berdasarkan nama gagal.
Penyelesaian melibatkan melintasi pepohon visual item yang dipilih untuk mencari kawalan yang diingini. Pendekatan rekursif menawarkan kaedah yang elegan dan cekap:
<code class="language-csharp">public List<Control> AllChildren(DependencyObject parent) { var list = new List<Control>(); for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++) { var child = VisualTreeHelper.GetChild(parent, i); list.Add(child as Control); // Add the child if it's a Control list.AddRange(AllChildren(child)); // Recursively search children } return list; }</code>
Kaedah ini meneroka secara rekursif semua kawalan anak ibu bapa tertentu. Untuk menggunakan ini pada FlipView
kami, kami menggunakan yang berikut:
<code class="language-csharp">if (MyFlipView.SelectedItem == null) return; var container = MyFlipView.ItemContainerGenerator.ContainerFromItem(MyFlipView.SelectedItem); var children = AllChildren(container); var img1 = children.OfType<Image>().FirstOrDefault(x => x.Name == "img1"); </code>
Coretan kod ini mula-mula mendapatkan semula bekas untuk item FlipView
yang dipilih. Kemudian, ia menggunakan kaedah AllChildren
untuk mendapatkan senarai semua kawalan kanak-kanak. Akhir sekali, ia menggunakan OfType<Image>()
LINQ untuk menapis senarai bagi kawalan Image
dan FirstOrDefault()
untuk mencari yang bernama "img1". Menggunakan FirstOrDefault()
mengendalikan kes di mana kawalan mungkin tidak ditemui, mengembalikan null
dan bukannya membuang pengecualian.
Pendekatan ini memastikan bahawa kami menyasarkan kawalan khusus dengan tepat dalam DataTemplate item yang dipilih, menyelesaikan isu konflik penamaan dengan berkesan. Ingat untuk menggantikan "img1"
dengan nama sebenar kawalan sasaran anda.
Atas ialah kandungan terperinci Bagaimana untuk Mengakses Kawalan Dinamakan dalam Templat Data XAML?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!