问题描述
|
如何获得视觉树中元素的下一个同级?此要素是数据绑定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来获取初始同级项。