Скрыть AppBar при прокрутке

Я пытаюсь создать некоторую функциональность, при которой AppBar приложения будет скрываться, когда я прокручиваю вниз ItemsControl - я прикрепил обработчик событий к ScrollViewer, но проблема, с которой я столкнулся, заключается в том, что функциональность очень чувствительный. Под этим я подразумеваю, что панель приложений продолжает отображаться и скрываться, когда я перемещаюсь вверх и вниз по списку.

Мой обработчик событий. У меня есть поле с именем scrollPoint, в котором хранится последнее вертикальное смещение прокрутки.

private void pushScroll_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
        {
            var scrollViewer = (ScrollViewer)sender;

            if (scrollViewer.VerticalOffset < scrollPoint)
            {
                bottomBar.Visibility = Visibility.Visible;
            }
            else
            {
                bottomBar.Visibility = Visibility.Collapsed;
            }


            scrollPoint = scrollViewer.VerticalOffset;
        }

Шаблон управления моими товарами

<ItemsControl.Template>
                    <ControlTemplate>
                        <ScrollViewer x:Name="pushScroll" VerticalScrollMode="Enabled" BringIntoViewOnFocusChange="True" ViewChanged="pushScroll_ViewChanged">
                            <ItemsPresenter />
                        </ScrollViewer>
                    </ControlTemplate>
                </ItemsControl.Template>

person Sandeep Bansal    schedule 03.06.2014    source источник


Ответы (2)


Вы думали о реализации таймера. Таким образом, вам нужно выполнить прокрутку в течение 1/2 секунды, прежде чем панель приложений вернется. Однако при прокрутке он практически мгновенно исчезает.

http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx

Вы также можете захотеть посмотреть на анимацию, чтобы она скользила и скользила назад.

person Rhyous    schedule 03.06.2014

Проблема с вашим решением заключается в том, что при прокрутке вверх панель приложений всегда будет скрыта. Вы пробовали IsIntermediate аргументов события? Это будет false, когда прокрутка перестанет прокручиваться, и true, когда прокрутка достигнет конца. попробуйте код ниже.

private async void scrollViewer_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
    {
        if (e.IsIntermediate)
        {
            this.BottomAppBar.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
        }
        else
            this.BottomAppBar.Visibility = Windows.UI.Xaml.Visibility.Visible;

    }
person Muhammad Saifullah    schedule 04.06.2014