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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top