Как получить следующий элемент в элементе управления привязкой данных? - PullRequest
6 голосов
/ 01 июня 2011

Как получить следующий элемент в визуальном дереве?Этот элемент данных является элементом данных ItemSource.Моя цель - получить доступ к брату в коде (предположим, что у меня есть доступ к самому элементу), а затем использовать BringIntoView.

Спасибо.

1 Ответ

4 голосов
/ 01 июня 2011

Например, если ваш 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

Это также работает, если ItemsControl является данными-связанный.Если у вас только имеется элемент данных (не соответствующий элемент интерфейса пользователя), вы можете использовать ItemContainerGenerator.ContainerFromItem API для получения начального брата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...