2009-06-16 31 views

回答

41

一个类似勒布的,但可能具有更好的性能解决方案:

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

我假设ItemsControl.Items[index]不工作呢?

我不是好笑,我没有检查我自己 - 这只是我的第一个猜测。大多数情况下,即使是数据绑定,控件也会具有项目索引器属性。

+2

这没有按' t检索“子”元素(控件),只检索列表中的项目,这些项目不一定是控件。 – 2009-06-16 09:43:52

+1

不,如果您使用数据源和数据模板,例如要在数据模板中使用的字符串负载,您将获得作为项目返回的字符串。 – 2009-06-16 09:45:35

+0

够公平的。我会留下我的回答,因为您的意见可能有用。 – 2009-06-16 15:37:14

-2

使用ItemsControl.Items属性:

foreach (var item in itemsControl1.Items) 
{ 
    Console.WriteLine(item.ToString()); 
} 
+0

要重复我的评论,如果您使用数据源和数据模板,例如在数据模板中使用的字符串的负载,你得到的字符串返回为 – 2009-06-16 09:46:34

19

看看这可以帮助你:

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

有一个控制和逻辑项的UIElement之间的差异。

9

要确定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 

    } 
} 
相关问题