Прокрутка списка со страницей вверх / вниз - PullRequest
1 голос
/ 10 апреля 2009

У меня был ItemsControl , который вы могли использовать для перемещения по страницам вверх / вниз для ожидаемой прокрутки. Я переключил его с помощью ListBox , чтобы применить (через триггеры) новый шаблон данных при выборе элемента.

Все работает нормально, пока не используются кнопки подкачки или постраничного вывода. Вместо прокрутки одной страницы, она прокручивается до конца или до начала.

Мои предыдущие попытки:

  • Не изменяется высота элемента при изменении DataTemplate
  • Удалено IsSelected = Истинный триггер полностью
  • Все значения SelectionMode

Я что-то упускаю из виду?

Ответы [ 2 ]

1 голос
/ 12 марта 2010
private void RaiseKeyDownUpEventsOnEntitiesBox(Key key)
{
    KeyEventArgs keyEventArgs = new KeyEventArgs(
        InputManager.Current.PrimaryKeyboardDevice,   
        Keyboard.PrimaryDevice.ActiveSource, 
        System.Environment.ProcessorCount, key);
    keyEventArgs.RoutedEvent = UIElement.KeyDownEvent; 
    entitiesBox.RaiseEvent(keyEventArgs);
    keyEventArgs.RoutedEvent = UIElement.KeyUpEvent; 
    entitiesBox.RaiseEvent(keyEventArgs);
}

Page Down

RaiseKeyDownUpEventsOnEntitiesBox(Key.Next);

Page Up

RaiseKeyDownUpEventsOnEntitiesBox(Key.Prior);
0 голосов
/ 10 апреля 2009

Действительно, я пропустил что-то тривиальное. Я забыл удалить ScrollViewer за пределами ItemsControl. Я думаю, это создает путаницу, поскольку ListBox имеет свой собственный ScrollViewer.

Это подняло еще один вопрос. Предыдущий ScrollViewer автоматически прокручивался вниз из кода позади. Теперь, когда я не могу добраться до ScrollViewer в ListBox, я не могу вызвать его LineDown метод. Вот мой обходной путь:

// Responses is the ItemsSource
Responses.Add(e); 
// xResponses is the ListBox
var item = xResponses.ItemContainerGenerator.ContainerFromIndex(0);
ScrollBar.LineDownCommand.Execute(null, item as IInputElement);

В начале item может иметь значение null, однако это не создает проблемы. После добавления нескольких элементов, к счастью, перед тем, как нам нужно прокрутить, контейнер успешно возвращается. Обратите внимание, что индекс здесь не важен, все что нам нужно - это IInputElement внутри ScrollViewer.

...