Question

Si j'ai un composant dérivé de ItemsControl , puis-je accéder à une collection de ses enfants afin de pouvoir les parcourir en boucle pour effectuer certaines actions? Je n'arrive pas à trouver un moyen facile pour le moment.

Était-ce utile?

La solution

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);
}

Autres conseils

Voyez si cela vous aide:

foreach(var item in itemsControl.Items)
{
    UIElement uiElement =
        (UIElement)itemsControl.ItemContainerGenerator.ContainerFromItem(item);
}

Il existe une différence entre les éléments logiques d'un contrôle et un UIElement .

Pour identifier les contrôles enfants databound 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top