Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Автоматический скроллинг ListView


Автор: dAlex 24.1.2011, 12:59
Попробую сейчас точнее объяснить, чего хочет начальник  smile 
Есть у нас ListView, туда постоянно что-то добавляется в начало и в конец. Также у нас есть некое текущее значение, оно меняется с каждым действием, но необходимо, чтобы визуально оно было всегда в середине, что бы куда не добавлялось. То есть нужно как-то скроллить его прямо из кода. Как это сделать?

Добавлено через 6 минут и 25 секунд
ps а как изменить название темы? не заметила косяка при ее создании

Автор: Kaerus 24.1.2011, 17:12
ListView.ScrollIntoView - пробовал?

Автор: vikaz 24.1.2011, 18:40
 smile 
Цитата(Kaerus @  24.1.2011,  19:12 Найти цитируемый пост)
ListView.ScrollIntoView - пробовал? 

Или ошибка, или dAlex девушка! smile
Цитата(dAlex @  24.1.2011,  14:59 Найти цитируемый пост)
не заметила косяка при ее создании


Автор: dAlex 25.1.2011, 11:38
Kaerus, спасибо, вроде бы по описанию то, что нужно, надо попробовать =)

vikaz, да, так и есть =))

Автор: dAlex 3.2.2011, 14:59
делаю вот так (со всеми проверками, конечно)

Код

StrikesTableList.ScrollIntoView(StrikesTableList.Items[_Cnum + 2]);


не мотает ничего :-?

Автор: Kefir 4.2.2011, 00:11
dAlex, даже если ничего не мотает, то по приведенной вами строке всё равно ничего понять невозможно. Развёрнутее пишите, чего не мотает, что происходит и так далее. Не ленитесь smile

Автор: dAlex 4.2.2011, 08:54
Kefir, хорошо =)
Есть список грубо говоря каких-то цен, который постоянно обновляется, цена может добавиться сверху, может добавиться и в конец списка. И есть всегда какое-то значение (в любом месте), которое является текущим. Мне нужно, чтобы оно было в зоне видимости (ну, в идеале посередине). Cnum это как раз и есть номер текущего элемента, а +2 - чтобы был виден и он и еще 2 после него, как раз должно получиться примерно посередине (по размеру ListView).
Вот эту строку
Код

StrikesTableList.ScrollIntoView(StrikesTableList.Items[_Cnum + 2]);

Пишу как раз в функции, где происходит добавление новых элементов.

Автор: dAlex 7.2.2011, 15:43
что-то не могу понять зависимости - надо в качествен параметра указывать элемент, который будет последний виден внизу списка или наверху?

Автор: dAlex 8.2.2011, 11:00
вроде работает, пришлось сделать так

Код

  Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Background, (System.Windows.Threading.DispatcherOperationCallback)delegate(object arg) 
            {            
              if (_Cnum + 2 >= StrikesTableList.Items.Count - 1)
                {
                    StrikesTableList.ScrollIntoView(StrikesTableList.Items[_Cnum + 2]);                 
                }
                return null; 
            }, null);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)