如何访问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]
不起作用,那么?
我不是很有趣,我没有自己检查 – 这只是我的第一次猜测。 通常,控件将具有项索引器属性,即使它是数据绑定的。