Frage

Ich versuche, eine Funktionalität zu erstellen, bei der die AppBar der App ausgeblendet wird, wenn ich nach unten scrolle ItemsControl - Ich habe einen Event-Handler an den ScrollViewer angehängt, aber das Problem, mit dem ich konfrontiert bin, ist, dass die Funktionalität sehr ist empfindlich.Damit meine ich, dass die App-Leiste immer wieder angezeigt und ausgeblendet wird, wenn ich in der Liste nach oben oder unten gehe.

Mein Event-Handler – ich habe ein Feld namens scrollPoint das den letzten vertikalen Scroll-Versatz speichert.

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

Meine ItemsControl-Vorlage

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

Lösung

Haben Sie darüber nachgedacht, einen Timer zu implementieren?Sie müssen also eine halbe Sekunde lang mit dem Scrollen fertig sein, bevor die App-Leiste wieder angezeigt wird.Beim Scrollen verschwindet es jedoch fast augenblicklich.

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

Möglicherweise möchten Sie auch eine Animation so betrachten, dass sie weg- und wieder zurückgleitet.

Andere Tipps

Das Problem bei Ihrer Lösung besteht darin, dass die App-Leiste beim Scrollen nach oben immer ausgeblendet wird.Haben Sie IsIntermediate der Ereignisargumente ausprobiert?Es ist „false“, wenn der Bildlauf aufhört zu scrollen, und „true“, wenn der Bildlauf das Ende erreicht.Versuchen Sie es mit dem folgenden Code.

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;

    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top