Maison >développement back-end >C++ >Comment puis-je accéder aux contrôles dans les modèles de données XAML ?
Accès aux contrôles dans les modèles de données XAML : un guide pratique
Accéder directement aux contrôles dans les DataTemplates XAML par leur nom peut être délicat. La nature dynamique des DataTemplates, créant des éléments à la volée, conduit souvent à des conflits de noms. Pour surmonter ce problème, nous devons parcourir l'arborescence visuelle (la structure hiérarchique de tous les éléments de l'interface utilisateur) en utilisant des techniques telles que la classe VisualTreeHelper
.
Méthode 1 : Traversée récursive de l'arbre visuel
Une fonction récursive explore efficacement l'arborescence visuelle. Cet exemple montre une méthode AllChildren
pour rechercher tous les contrôles enfants :
<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>
Cette méthode peut localiser un contrôle par son nom dans l'arborescence visuelle. Par exemple, pour trouver un Image
nommé "img1" dans l'élément sélectionné d'un FlipView
:
MyFlipView.SelectedItem
n'est pas nul.var container = MyFlipView.ItemContainerGenerator.ContainerFromItem(MyFlipView.SelectedItem);
AllChildren(container)
pour obtenir tous les enfants.Image
portant le nom "img1".Méthode 2 : tirer parti de TemplatedParent
Vous pouvez également utiliser la propriété TemplatedParent
pour accéder au contrôle parent à partir du DataTemplate. Cette approche nécessite une classe d'assistance :
<code class="language-csharp">public class TemplatedControl<TControl> : ContentControl where TControl : FrameworkElement { public TemplatedControl(TControl control) { Content = control; } public TControl Child => (TControl)Content; }</code>
Ensuite, dans votre DataTemplate :
<code class="language-xaml"><datatemplate> <templatedcontrol x:Name="myImage"> <image ... /> </templatedcontrol> </datatemplate></code>
Vous pouvez désormais accéder au contrôle Image
via la variable myImage
depuis le contrôle parent.
Les deux méthodes fournissent des solutions pour accéder aux contrôles nommés dans les DataTemplates, offrant ainsi plus de contrôle sur votre interface utilisateur basée sur les données. Choisissez la méthode qui convient le mieux à votre style de codage et à la structure de votre projet.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!