Si j’ai un composant dérivé de ItemsControl
, puis-je accéder à une collection de ses enfants afin que je puisse les parcourir en boucle pour effectuer certaines actions? Je n’arrive pas à trouver un moyen facile pour le moment.
Une solution similaire à celle de Seb mais probablement avec de meilleures performances:
for(int i = 0; i < itemsControl.Items.Count; i++) { UIElement uiElement = (UIElement)itemsControl.ItemContainerGenerator.ContainerFromIndex(i); }
Voyez si cela vous aide:
foreach(var item in itemsControl.Items) { UIElement uiElement = (UIElement)itemsControl.ItemContainerGenerator.ContainerFromItem(item); }
Il y a une différence entre les éléments logiques d’un contrôle et un UIElement
.
Pour identifier les contrôles enfants liés à la firebase database de ItemsControl
(comme un ToggleButton
), vous pouvez utiliser ceci:
for (int i = 0; i < yourItemsControl.Items.Count; i++) { ContentPresenter c = (ContentPresenter)yourItemsControl.ItemContainerGenerator.ContainerFromItem(yourItemsControl.Items[i]); ToggleButton tb = c.ContentTemplate.FindName("btnYourButtonName", c) as ToggleButton; if (tb.IsChecked.Value) { //do stuff } }
Je suppose que ItemsControl.Items[index]
ne fonctionne pas, alors?
Je ne suis pas drôle et je ne me suis pas vérifié – c’est ma première hypothèse. Le plus souvent, un contrôle aura une propriété d’indexeur d’éléments, même si elle est databound.