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