Maison >développement back-end >C++ >Comment accéder aux contrôles dans les modèles de données XAML dans un FlipView ?
Les modèles de données rationalisent le rendu des éléments en XAML, mais l'accès aux contrôles internes présente un défi en raison de la séparation visuelle et logique de l'arborescence. La propriété Name
n'est pas directement utilisable dans le FlipView
d'un DataTemplate
en raison de conflits de noms potentiels entre plusieurs instances de modèle.
La solution réside dans l'utilisation de VisualTreeHelper
pour parcourir l'arborescence visuelle et localiser le contrôle spécifique au sein de chaque élément généré.
Une fonction d'assistance :
Cette fonction recherche récursivement dans l'arborescence visuelle un contrôle portant un nom donné :
<code class="language-csharp">public T FindChildControl<T>(DependencyObject control, string ctrlName) where T : DependencyObject { int childNumber = VisualTreeHelper.GetChildrenCount(control); for (int i = 0; i < childNumber; i++) { DependencyObject child = VisualTreeHelper.GetChild(control, i); FrameworkElement fe = child as FrameworkElement; if (fe != null && fe.Name == ctrlName) { return child as T; } else { T nextLevel = FindChildControl<T>(child, ctrlName); if (nextLevel != null) return nextLevel; } } return null; }</code>
Accès au contrôle :
Pour récupérer un contrôle (par exemple, un Image
nommé "img1") à partir de l'élément FlipView
actuellement sélectionné, utilisez ce code :
<code class="language-csharp">var selectedItem = MyFlipView.SelectedItem; if (selectedItem == null) return null; var container = MyFlipView.ItemContainerGenerator.ContainerFromItem(selectedItem); Image img1 = FindChildControl<Image>(container, "img1");</code>
Ceci récupère le contrôle Image
. Pensez à gérer le cas null
si le contrôle n'est pas trouvé.
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!