2009-04-10 6 views
1

나는 ItemsControl을 가지고 있습니다. 페이지 위로/아래로 버튼을 사용하여 예상대로 스크롤 할 수있었습니다. ListBox으로 전환하여 항목을 선택하면 새 DataTemplate을 적용 (트리거)합니다.페이지 위로/아래로 목록 상자 스크롤하기

pageup 또는 pagedown 버튼을 사용할 때까지 모든 것이 잘 작동합니다. 한 페이지를 스크롤하는 대신 끝에 끝까지 스크롤합니다.

내 이전 시도한다는 : DataTemplate을 완전히

  • 모두의 selectionMode이 값에 isSelected = TRUE 트리거 제거
  • 가 변경 될 때

    내가 사소한 무언가를 그리워 항목의 높이를 변경하지?

  • +0

    그렇지 않으면 우리가 추측하는 몇 가지 코드를 붙여 넣습니다. –

    답변

    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 만 있으면됩니다.

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

    페이지 위로는

    +0

    Keyboard.PrimaryDevice.ActiveSource가 null 인 경우 new HwndSource (0, 0, 0, 0, 0, string.Empty, IntPtr.Zero) –