2011-06-01 54 views

回答

4

例如,如果您的ItemsControlListBox,則元素將是ListBoxItem對象。如果你有一個ListBoxItem並且要在列表中的下ListBoxItem,您可以使用ItemContainerGenerator API找到這樣的:

public static DependencyObject GetNextSibling(ItemsControl itemsControl, DependencyObject sibling) 
{ 
    var n = itemsControl.Items.Count; 
    var foundSibling = false; 
    for (int i = 0; i < n; i++) 
    { 
     var child = itemsControl.ItemContainerGenerator.ContainerFromIndex(i); 
     if (foundSibling) 
      return child; 
     if (child == sibling) 
      foundSibling = true; 
    } 
    return null; 
} 

這是一些示例XAML:

<Grid> 
    <ListBox Name="listBox"> 
     <ListBoxItem Name="item1">Item1</ListBoxItem> 
     <ListBoxItem Name="item2">Item2</ListBoxItem> 
    </ListBox> 
</Grid> 

和代碼 - 背後:

void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    var itemsControl = listBox; 
    var sibling = item1; 
    var nextSibling = GetNextSibling(itemsControl, sibling) as ListBoxItem; 
    MessageBox.Show(string.Format("Sibling is {0}", nextSibling.Content)); 
} 

導致:

Sibling MessageBox

如果ItemsControl是數據綁定的,這也適用。如果你只有有數據項(不是相應的用戶界面元素),你可以使用ItemContainerGenerator.ContainerFromItem API來獲得初始兄弟。

+0

感謝您花時間給出完整答案! :) – Alexander 2011-06-01 03:03:07

相關問題