首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在数据绑定项控件中获取项的下一个同级项?

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

Stack Overflow用户
提问于 2011-06-01 09:29:35
回答 1查看 1.4K关注 0票数 6

如何在可视化树中获取元素的下一个同级元素?此元素是数据绑定ItemsSource的数据项。我的目标是在代码中访问同级(假设我可以访问元素本身),然后使用BringIntoView。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-01 10:47:20

例如,如果您的ItemsControlListBox,则元素将是ListBoxItem对象。如果您有一个ListBoxItem,并且想要列表中的下一个ListBoxItem,您可以使用ItemContainerGenerator接口来查找它,如下所示:

代码语言:javascript
复制
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示例:

代码语言:javascript
复制
<Grid>
    <ListBox Name="listBox">
        <ListBoxItem  Name="item1">Item1</ListBoxItem>
        <ListBoxItem Name="item2">Item2</ListBoxItem>
    </ListBox>
</Grid>

和代码隐藏:

代码语言:javascript
复制
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));
}

这会导致:

如果ItemsControl是数据绑定的,这也是有效的。如果只有具有数据项(没有相应的用户界面元素),则可以使用ItemContainerGenerator.ContainerFromItem获取初始同级。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6195339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档