【发布时间】:2010-11-03 06:36:07
【问题描述】:
如果我有一个派生自 ItemsControl 的组件,我可以访问它的子组件的集合,以便循环访问它们以执行某些操作吗?目前我似乎找不到任何简单的方法。
【问题讨论】:
标签: c# wpf itemscontrol
如果我有一个派生自 ItemsControl 的组件,我可以访问它的子组件的集合,以便循环访问它们以执行某些操作吗?目前我似乎找不到任何简单的方法。
【问题讨论】:
标签: c# wpf itemscontrol
类似于Seb's但性能可能更好的解决方案:
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
}
}
【讨论】:
FindName()之前需要先调用c.ApplyTemplate();,否则返回null。