Если у меня есть компонент, полученный из ItemsControl, могу ли я получить доступ к коллекции его дочерних элементов, чтобы я мог просматривать их для выполнения определенных действий? Кажется, сейчас я не могу найти легкий путь.
ItemsControl
Решение, похожее на Seb, но, вероятно, с лучшей производительностью:
for(int i = 0; i < itemsControl.Items.Count; i++) { UIElement uiElement = (UIElement)itemsControl.ItemContainerGenerator.ContainerFromIndex(i); }
Посмотрите, поможет ли это вам:
foreach(var item in itemsControl.Items) { UIElement uiElement = (UIElement)itemsControl.ItemContainerGenerator.ContainerFromItem(item); }
Существует разница между логическими элементами в элементе управления и UIElement.
UIElement
Для идентификации дочерних элементов управления ItemsControl (например, ToggleButton) вы можете использовать это:
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 } }
Полагаю, ItemsControl.Items[index] не работает, тогда?
ItemsControl.Items[index]
Я не смешной, и я не проверил себя - это только мое первое предположение. Чаще всего элемент управления имеет свойство индексатора элементов, даже если оно связано с данными.