Проблема с автоскроллингом на ListView в виртуальном режиме
От: coresh1988  
Дата: 27.10.10 13:23
Оценка:
Здравствуйте! Помогите плиз!
Ситуация:
Есть WPF форма, на ней текстбокс со строкой для поиска и листвью, в который записываются данные в виртуальном режиме по страницам.
Проблема заключается в следующем:
Если вы находитесь не на первой странице листвью, то при поиске листвью не может промотаться в самый вверх, а остается в той же позиции, в которой был. Пробовал несколько вариантов, которые предлагаются в гугле, что-то ничего не помогает. По идее первый элемент я получить могу,вот только
lvProduct.ScrollIntoView(lvProduct.SelectedItem);

на него не делаеться. Может у кого-нить был опыт.

28.10.10 11:04: Перенесено из '.NET'
Re: Проблема с автоскроллингом на ListView в виртуальном реж
От: Аноним  
Дата: 28.10.10 06:53
Оценка:
Здравствуйте, coresh1988, Вы писали:

C>Здравствуйте! Помогите плиз!

C>Ситуация:
C>Есть WPF форма, на ней текстбокс со строкой для поиска и листвью, в который записываются данные в виртуальном режиме по страницам.
C>Проблема заключается в следующем:
C>Если вы находитесь не на первой странице листвью, то при поиске листвью не может промотаться в самый вверх, а остается в той же позиции, в которой был. Пробовал несколько вариантов, которые предлагаются в гугле, что-то ничего не помогает. По идее первый элемент я получить могу,вот только
C>
C>lvProduct.ScrollIntoView(lvProduct.SelectedItem);
C>

C>на него не делаеться. Может у кого-нить был опыт.

Попробуйте


if (lvProduct.Items.Count > 0)
{
    lvProduct.ScrollIntoView(itemsview.Items[0]);
    lvProduct.SelectedIndex = 0;
}
Re: Проблема с автоскроллингом на ListView в виртуальном реж
От: Fortnum  
Дата: 28.10.10 07:56
Оценка:
Здравствуйте, coresh1988, Вы писали:

C>вот только

C>lvProduct.ScrollIntoView(lvProduct.SelectedItem);

C>на него не делаеться. Может у кого-нить был опыт.

Надо добраться до ScrollView'вера в контроле ListView и сделать ему ScrollToHome:
var scrollViewer = SearchDownFirstChild<ScrollViewer>(_listView);

if (scrollViewer != null)
{
    scrollViewer.ScrollToHome();
}

// А это вспомогательная функция

T SearchDownFirstChild<T>(DependencyObject parent) where T : DependencyObject
{
    var childrentCount = VisualTreeHelper.GetChildrenCount(parent);

    for (int childIndex = 0; childIndex < childrentCount; childIndex++)
    {
        var child = VisualTreeHelper.GetChild(parent, childIndex);

        if (child is T)
        {
            return (T)child;
        }
        else
        {
            child = SearchDownFirstChild<T>(child);

            if (child != null)
            {
                return (T)child;
            }
        }
    }
            
    return null;
}
Re[2]: Проблема с автоскроллингом на ListView в виртуальном
От: coresh1988  
Дата: 29.10.10 07:12
Оценка:
Здравствуйте, Fortnum, Вы писали:

F>Надо добраться до ScrollView'вера в контроле ListView и сделать ему ScrollToHome:

F>
F>var scrollViewer = SearchDownFirstChild<ScrollViewer>(_listView);

F>if (scrollViewer != null)
F>{
F>    scrollViewer.ScrollToHome();
F>}

F>// А это вспомогательная функция

F>T SearchDownFirstChild<T>(DependencyObject parent) where T : DependencyObject
F>{
F>    var childrentCount = VisualTreeHelper.GetChildrenCount(parent);

F>    for (int childIndex = 0; childIndex < childrentCount; childIndex++)
F>    {
F>        var child = VisualTreeHelper.GetChild(parent, childIndex);

F>        if (child is T)
F>        {
F>            return (T)child;
F>        }
F>        else
F>        {
F>            child = SearchDownFirstChild<T>(child);

F>            if (child != null)
F>            {
F>                return (T)child;
F>            }
F>        }
F>    }
            
F>    return null;
F>}
F>


Гениально! Спасибо большое за помощь, вы очень помогли
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.