Как получить доступ к дочерним элементам ItemsControl? - PullRequest
24 голосов
/ 16 июня 2009

Если у меня есть компонент, полученный из ItemsControl, могу ли я получить доступ к коллекции его дочерних элементов, чтобы я мог просматривать их для выполнения определенных действий? Кажется, сейчас я не могу найти легкий путь.

Ответы [ 4 ]

49 голосов
/ 16 июня 2009

Решение, похожее на Seb, но, вероятно, с лучшей производительностью:

for(int i = 0; i < itemsControl.Items.Count; i++)
{
    UIElement uiElement =
        (UIElement)itemsControl.ItemContainerGenerator.ContainerFromIndex(i);
}
21 голосов
/ 16 июня 2009

Посмотрите, поможет ли это вам:

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

Существует разница между логическими элементами в элементе управления и UIElement.

12 голосов
/ 09 декабря 2009

Для идентификации дочерних элементов управления ItemsControl (например, ToggleButton) вы можете использовать это:

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

    }
}
0 голосов
/ 16 июня 2009

Полагаю, ItemsControl.Items[index] не работает, тогда?

Я не смешной, и я не проверил себя - это только мое первое предположение. Чаще всего элемент управления имеет свойство индексатора элементов, даже если оно связано с данными.

...