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

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

24
задан Dave Clemmer 6 September 2013 в 16:44
поделиться

4 ответа

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

for(int i = 0; i < itemsControl.Items.Count; i++)
{
    UIElement uiElement =
        (UIElement)itemsControl.ItemContainerGenerator.ContainerFromIndex(i);
}
54
ответ дан 28 November 2019 в 17:48
поделиться

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

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

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

22
ответ дан 28 November 2019 в 17:48
поделиться

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

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

0
ответ дан 28 November 2019 в 17:48
поделиться

Чтобы идентифицировать дочерние элементы управления привязкой к данным 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

    }
}
12
ответ дан 28 November 2019 в 17:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: