Например, если ваш 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));
}
, что приводит к:
![Sibling MessageBox](https://i.stack.imgur.com/Yf07H.png)
Это также работает, если ItemsControl
является данными-связанный.Если у вас только имеется элемент данных (не соответствующий элемент интерфейса пользователя), вы можете использовать ItemContainerGenerator.ContainerFromItem
API для получения начального брата.