Как получить доступ к дочерним элементам ItemsControl?

Ответов: 4


43 принят

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

for(int i = 0; i < itemsControl.Items.Count; i++)
{
    UIElement uiElement =
        (UIElement)itemsControl.ItemContainerGenerator.ContainerFromIndex(i);
}

20

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

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

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


10

Чтобы определить ItemsControlдочерние элементы управления дочерними элементами (например, a 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

Я предполагаю, что ItemsControl.Items[index]это не сработает?

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

C #, WPF, ItemsControl,
Похожие вопросы