Come posso accedere ai figli di un ItemsControl?
-
05-07-2019 - |
Domanda
Se ho un componente derivato da ItemsControl
, posso accedere a una raccolta dei suoi figli in modo da poterli scorrere per eseguire determinate azioni? Al momento non riesco a trovare un modo semplice.
Soluzione
Una soluzione simile a quella di Seb ma probabilmente con prestazioni migliori:
for(int i = 0; i < itemsControl.Items.Count; i++)
{
UIElement uiElement =
(UIElement)itemsControl.ItemContainerGenerator.ContainerFromIndex(i);
}
Altri suggerimenti
Vedi se questo ti aiuta:
foreach(var item in itemsControl.Items)
{
UIElement uiElement =
(UIElement)itemsControl.ItemContainerGenerator.ContainerFromItem(item);
}
Esiste una differenza tra gli elementi logici in un controllo e un UIElement
.
Per identificare i controlli secondari figlio di ItemsControl
(come un ToggleButton
), puoi usare questo:
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
}
}
Suppongo che ItemsControl.Items [index]
non funzioni, allora?
Non sono divertente e non ho verificato da solo - questa è solo la mia prima ipotesi. Molto spesso un controllo avrà una proprietà dell'indicizzatore di elementi, anche se è un database.