我有一个 ItemsControl ,您可以使用页面向上/向下按钮进行预期滚动。我用 ListBox 切换它,以便在选择项目时应用(通过触发器)新的DataTemplate。
一切正常,直到使用pageup或pagedown按钮。它不是滚动一页,而是滚动到结束或开始。
我以前的尝试:
我是否想念一些微不足道的事情?
答案 0 :(得分:1)
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);
答案 1 :(得分:0)
确实,我错过了一些微不足道的事情。我忘了在ItemsControl之外删除ScrollViewer。我猜,这会造成混乱,因为ListBox有自己的ScrollViewer。
这提出了另一个问题。以前的ScrollViewer自动从后面的代码向下滚动。现在,我无法访问ListBox的ScrollViewer,我无法调用其 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);
一开始,项可能会评估为null,但这不会产生问题。在添加几个项目之后,幸运的是在我们需要滚动之前,成功返回一个容器。请注意,索引在这里并不重要,我们需要的只是ScrollViewer中的 IInputElement 。