3

我有一个ItemsControl,您可以使用向上/向下翻页按钮按预期滚动。我用ListBox切换它,以在选择项目时应用(通过触发器)新的 DataTemplate 。

一切正常,直到使用 pageup 或 pagedown 按钮。它不是滚动一页,而是滚动到结尾或开头。

我之前的尝试:

  • DataTemplate 更改时不更改项目高度
  • 完全删除 IsSelected=True 触发器
  • 所有 SelectionMode 值

我错过了一些微不足道的事情吗?

4

2 回答 2

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);
}

向下翻页

RaiseKeyDownUpEventsOnEntitiesBox(Key.Next);

向上翻页

RaiseKeyDownUpEventsOnEntitiesBox(Key.Prior);
于 2010-03-12T15:15:38.730 回答
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);

一开始,item可能评估为 null,但这不会产生问题。添加了一些项目之后,幸运的是在我们需要滚动之前,成功返回了一个容器。请注意,这里的索引并不重要,我们只需要ScrollViewer中的IInputElement 。

于 2009-04-10T14:19:37.710 回答