【问题标题】:Auto Hide Header and Footer on Scroll on Windows phone 8.1在 Windows phone 8.1 上滚动时自动隐藏页眉和页脚
【发布时间】:2016-05-04 21:30:52
【问题描述】:

我需要有关在 Windows Phone 8.1 上的 ListView 上隐藏滚动标题的帮助

我已经创建了隐藏标题的 SlideView 框架,但这个框架的重点是关于汉堡菜单并且没有任何文档。

是否有人有同样的需求并知道其他框架或其他方式来做到这一点?

SlideView 框架链接: https://slideview.codeplex.com/

谢谢!

【问题讨论】:

    标签: c# windows-phone-8 header footer


    【解决方案1】:

    您需要获得对ListViewScrollViewer 的引用,您将在该引用上侦听滚动行为。当ScrollViewer 的视图发生变化时,您只需隐藏ListView 的页眉和页脚。

    我创建了一个扩展 ListView 并处理页眉/页脚隐藏的示例类:

    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Media;
    
    public class CustomListView : ListView
    {
        private object _header;
        private object _footer;
    
        protected override void OnApplyTemplate()
        {
            base.OnApplyTemplate();
    
            Loaded += OnLoaded;
        }
    
        private void OnLoaded(object sender, RoutedEventArgs args)
        {
            Loaded -= OnLoaded;
            var scrollViewer = FindChild<ScrollViewer>(this);
            if(scrollViewer == null) return;
    
            scrollViewer.ViewChanged += ScrollViewerOnViewChanged;
        }
    
        private void ScrollViewerOnViewChanged(object sender, ScrollViewerViewChangedEventArgs args)
        {
            if (Header != null)
            {
                _header = Header;
                Header = null;
            }
    
            if (Footer != null)
            {
                _footer = Footer;
                Footer = null;
            }
    
            // TODO start a timer which will restore the header and footer after a specified amount of time when this event is not fired
        }
    
        private static T FindChild<T>(DependencyObject parent) where T : DependencyObject
        {
            var childCount = VisualTreeHelper.GetChildrenCount(parent);
            for (var i = 0; i < childCount; i++)
            {
                var elt = VisualTreeHelper.GetChild(parent, i);
                if (elt is T) return (T)elt;
                var result = FindChild<T>(elt);
                if (result != null) return result;
            }
    
            return null;
        }
    }
    

    我没有测试过这段代码,但我希望能给你带来正确的方向。

    【讨论】:

    • 嗨,Vukusic!我将把这段代码存储在我的 Gist 上!但是,就我而言,我将不得不创建一个新控件。因为我需要添加动画并使用 ListView 控件之外的页眉和页脚。我正在考虑扩展 SlideView 框架并更改动画模板以使用页脚。谢谢 Vukusic!
    猜你喜欢
    • 2016-03-02
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    相关资源
    最近更新 更多