37

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

4

3 回答 3

62

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

for(int i = 0; i < itemsControl.Items.Count; i++)
{
    UIElement uiElement =
        (UIElement)itemsControl.ItemContainerGenerator.ContainerFromIndex(i);
}
于 2009-06-16T09:42:42.057 回答
25

看看这是否对您有帮助:

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

控件中的逻辑项与UIElement.

于 2009-06-16T09:31:22.003 回答
21

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

    }
}
于 2009-12-09T20:11:10.327 回答