如何访问ItemsControl的子项?

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

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

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

看看这是否有助于你:

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

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

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

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

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