3

私はItemsControlを持っていました。これは、ページの上下ボタンを使用してスクロールすることができます。項目が選択されたときに新しい DataTemplate を (トリガーを介して) 適用するために、 ListBoxに切り替えました。

ページアップまたはページダウンボタンを使用するまで、すべてが正常に機能します。1ページスクロールする代わりに、最後または最初までスクロールします。

私の以前の試み:

  • 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 と評価されることがありますが、これは問題にはなりません。いくつかの項目を追加した後、幸運にもスクロールする前に、コンテナーが正常に返されました。ここでは index は重要ではないことに注意してください。必要なのはScrollViewer内の IInputElement だけです。

于 2009-04-10T14:19:37.710 に答える