如何访问ItemsControl的子项?

时间:2009-06-16 09:06:45

标签: c# wpf itemscontrol

如果我有一个派生自ItemsControl的组件,我可以访问它的子集合,以便我可以遍历它们来执行某些操作吗?我现在似乎找不到任何简单的方法。

4 个答案:

答案 0 :(得分:49)

类似于Seb的解决方案,但可能具有更好的性能:

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

答案 1 :(得分:21)

看看这是否有助于你:

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

控件中的逻辑项与UIElement之间存在差异。

答案 2 :(得分:12)

要识别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

    }
}

答案 3 :(得分:0)

我假设ItemsControl.Items[index]不起作用,那么?

我不是很有趣,我没有自己检查 - 这只是我的第一次猜测。通常,控件将具有项索引器属性,即使它是数据绑定。