代码之家  ›  专栏  ›  技术社区  ›  orcun

向上/向下翻页时滚动列表框

  •  1
  • orcun  · 技术社区  · 15 年前

    我有一个 项目控制 ,您可以使用上/下翻页按钮按预期滚动。我换了一个 列表框 ,以在选择项时应用(通过触发器)新的数据模板。

    在使用pageup或pagedown按钮之前,一切正常。它不是滚动一页,而是滚动到最后或开始。

    我以前的尝试:

    • 数据模板更改时不更改项高度
    • 已删除IsSelected=true完全触发
    • 所有SelectionMode值

    我会错过一些小事吗?

    2 回复  |  直到 15 年前
        1
  •  1
  •   user192955    14 年前
    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);
    
        2
  •  0
  •   orcun    15 年前

    的确,我错过了一些小事。我忘了把ScrollViewer移到itemsControl之外。我猜,这会造成混乱,因为列表框有自己的滚动查看器。

    这又提出了一个问题。以前的ScrollViewer从代码隐藏处自动向下滚动。现在,我无法访问列表框的滚动查看器,我无法调用它 林登 方法。这是我的解决方法:

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

    一开始, 项目 可能计算为空,但这不会造成问题。在添加了一些项目之后,幸运的是在需要滚动之前,容器被成功返回。请注意,索引在这里并不重要,我们只需要一个 输入元素 在ScrollViewer中。