如何在数据绑定项控件中获得该项的下一个同级项?

问题描述

| 如何获得视觉树中元素的下一个同级?此要素是数据绑定ItemsSource的数据项。我的目标是访问兄弟姐妹的代码(假设我可以访问元素本身),然后使用BringIntoView。 谢谢。     

解决方法

        例如,如果您的
ItemsControl
ListBox
,则元素将是
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));
}
结果是: 如果“ 0”是数据绑定的,这也适用。如果只有数据项(而不是相应的用户界面元素),则可以使用“ 10” API来获取初始同级项。