Я хочу отобразить SearchBox, когда пользователь прокручивает сетку, подобную поисковому окну, который появляется в Whatsapp, когда пользователь прокручивает списокView. Я знаю, как добавить простое окно поиска, которое всегда видимо, но возможно ли в UWP иметь такое же поведение, как и iOS?Как отобразить поисковую строку на прокрутке сетки в UWP, такую же, как Whatsapp в iOS?
ответ
Одним из способов достижения этой цели является наличие обработчик событий ScrollViewers ViewChanged проверить тип прокруткой. Это ScrollViewer может быть частью ListView, GridView и т.д.
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);
}
}
Это ниже линии коды, когда, если я прокрутка небольшого количества вертикального расстояния, т.е.; 70, то не показывает SearchBox, но если изменение больше, чем смещение + 70, а затем отображение SearchBox. Также покажите это, если scrollviewer находится наверху.
previousScrollPosition > Scroller.VerticalOffset + 70 || Scroller.VerticalOffset == 0
И так как вы хотите только SearchBox, когда находитесь на самом верху. замените указанную выше строку кода только Scroller.VerticalOffset == 0
Спасибо. Это работает так, как ожидалось, но вы можете объяснить, что такое использование «var maxVerticalOffsetValue = Scroller.ExtentHeight - Scroller.ViewportHeight;» и 'previousScrollPosition> Scroller.VerticalOffset + 70 || Scroller.VerticalOffset == 0' –
Кроме того, поисковый ящик появляется, когда я вертикально прокручиваю снизу вверх, возможно ли, что он появляется, когда мы делаем жест аналогично pull to refresh? –
Проверьте изменения. – AbsoluteSith
Можете ли вы быть более ясными. Возможно, загрузите gif требуемого действия? – AbsoluteSith
в приложении iOS Whatsapp, это окно поиска появляется при прокрутке списка чатов, я хочу добавить подобное поведение. SearchBox должен быть скрыт по умолчанию, а затем, когда пользователь прокручивает, появляется окно поиска. –