2017-05-02 13 views
1

必要に応じてListBoxにアイテムをロードするロジックを実装しようとしています。ユーザーがスクロールバーまたはマウスホイールを使用してスクロールすると、それ以上のデータがあるかどうかがチェックされ、ロードされます。私が持っている唯一の問題は、ListBoxを埋めるための項目が不足してScrollBarが表示されず、結果としてMouseWheelイベントもScrollViewer.VerticalOffsetProperty ValueChangedイベントハンドラも呼び出されないということです。WPFリストボックスは、必要な場合にアイテムをロードし、リストに項目がない場合

static void AssignCommand(object sender, RoutedEventArgs e) 
     { 
      FrameworkElement element = (FrameworkElement)sender; 
      element.Loaded -= AssignCommand; 

      ScrollViewer scrollViewer = GetDescendantByType<ScrollViewer>(element); 
      if (scrollViewer == null) 
      { 
       throw new InvalidOperationException("ScrollViewer not found."); 
      } 

      element.MouseWheel += delegate 
      { 
       // listbox not called 
      }; 

      scrollViewer.MouseWheel += delegate 
      { 
       // scrollviewer not called 
       var visibility = scrollViewer.ComputedVerticalScrollBarVisibility; 
       if (visibility == Visibility.Collapsed) 
       { 
        //try to fetch data 
       } 
      }; 

      var dpd = DependencyPropertyDescriptor.FromProperty(ScrollViewer.VerticalOffsetProperty, typeof(ScrollViewer)); 
      dpd.AddValueChanged(scrollViewer, delegate 
      { 
       bool atBottom = scrollViewer.VerticalOffset 
            >= scrollViewer.ScrollableHeight; 

       if (atBottom) 
       { 
        var atEnd = GetAtEndCommand(element); 
        atEnd?.Execute(null); 
       } 
      }); 
     } 

私はそれがScrollViewerの基礎となるで扱わいないにもかかわらず、ListBox.MouseWheelイベントが呼び出されないことに驚いています。私はComputedVerticalScrollBarVisibilityを利用したいと思っています。もしそれが見えないなら、ユーザがスクロールするたびにデータを取得しようとするべきです。

答えて

0

答えはPreviewMouseWheel

scrollViewer.PreviewMouseWheel += delegate 
      { 
       var visibility = scrollViewer.ComputedVerticalScrollBarVisibility; 
       if (visibility == Visibility.Collapsed) 
       { 
        //try to fetch data 
       } 
      }; 
です
関連する問題