2009-06-16 45 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 

    } 
} 
相關問題