2017-02-13 1 views
0

ユーザーがlistViewをスクロールしたときに、Whatsappに表示される検索ボックスと同様に、グリッドをスクロールするときにSearchBoxを表示したいとします。私は、いつでも見ることができる単純な検索ボックスを追加する方法を知っていますが、UWPではiOSと同じ動作をすることが可能ですか?これを達成するためのiOSのWhatsappと同じUWPのグリッドのスクロールにsearchboxを表示するには?

enter image description here

+1

あなたはもっと明確になることができます。おそらく必要なアクションのGIFをアップロードしますか? – AbsoluteSith

+0

iOS Whatsapp Appでは、チャットのリストをスクロールしたときにこれらの検索ボックスが表示されますが、同様の動作を追加します。デフォルトではSearchBoxを非表示にし、ユーザーがスクロールすると検索ボックスが表示されます。 –

答えて

1

一つの方法は、ScrollViewers ViewChangedイベントハンドラは、スクロールの種類を確認することによってです。このScrollViewerのは、私が垂直距離、すなわち、少量をスクロールしていた場合、このコードの行の下にいるときなど

private double previousScrollPosition = -1; 

private async void ScrollViewer_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e) 
{ 
    try 
    { 
     ScrollViewer Scroller = sender as ScrollViewer; 

     var verticalOffsetValue = Scroller.VerticalOffset; 
     var maxVerticalOffsetValue = Scroller.ExtentHeight - Scroller.ViewportHeight; 
     if (previousScrollPosition < Scroller.VerticalOffset) 
     { 
      await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
      () => 
      { 
       previousScrollPosition = Scroller.VerticalOffset; 
       SearchSP.Visibility = Visibility.Collapsed; 
      }); 
     } 
     else if (previousScrollPosition > Scroller.VerticalOffset + 70 || Scroller.VerticalOffset == 0) 
     { 
      await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, 
      () => 
      { 
       previousScrollPosition = Scroller.VerticalOffset; 
       SearchSP.Visibility = Visibility.Visible; 
      }); 
     } 
    } 
    catch (Exception ex) 
    { 
     Debug.WriteLine("Error in scrollviewer changed " + ex.Message); 
    } 
} 

リストビューの一部で、GridViewコントロールすることができ、70はその後、サーチを示すがない場合は変更がオフセット+ 70より大きい場合、SearchBoxが表示されます。また、スクロールビューアが上部にある場合はそれを表示します。

previousScrollPosition > Scroller.VerticalOffset + 70 || Scroller.VerticalOffset == 0 

あなたが一番上にいるときだけ、検索ボックスが必要なので、上記のコード行を唯一で置き換えてくださいScroller.VerticalOffset == 0

+0

ありがとうございます。これは期待通りに機能しますが、 'var maxVerticalOffsetValue = Scroller.ExtentHeight - Scroller.ViewportHeight;'と 'previousScrollPosition> Scroller.VerticalOffset + 70の使い方について説明できます。 Scroller.VerticalOffset == 0' –

+0

また、下から上に垂直スクロールしたときにsearchboxが表示されます。これは、ジェスチャを実行してリフレッシュするときに表示される可能性がありますか? –

+0

編集を確認してください。 – AbsoluteSith

関連する問題