导航

简介: 原文:导航切换动画,相关的过渡动画,是淡入淡出的效果 private void Frame_Navigating(object sender, NavigatingCancelEventArgs e) { if (Content != nul...
原文: 导航

切换动画,相关的过渡动画,是淡入淡出的效果

   private void Frame_Navigating(object sender, NavigatingCancelEventArgs e)
        {
            if (Content != null && !_allowDirectNavigation)
            {
                e.Cancel = true;
                _navArgs = e;
                this.IsHitTestVisible = false;
                DoubleAnimation da = new DoubleAnimation(0.3d, new Duration(TimeSpan.FromMilliseconds(100)));
                da.Completed += FadeOutCompleted;
                this.BeginAnimation(OpacityProperty, da);

            }
            _allowDirectNavigation = false;
        }

        private void FadeOutCompleted(object sender, EventArgs e)
        {
            (sender as AnimationClock).Completed -= FadeOutCompleted;

            this.IsHitTestVisible = true;

            _allowDirectNavigation = true;
            switch (_navArgs.NavigationMode)
            {
                case NavigationMode.New:
                    if (_navArgs.Uri == null)
                    {
                        this.myFrame.NavigationService.Navigate(_navArgs.Content);
                    }
                    else
                    {
                        this.myFrame.NavigationService.Navigate(_navArgs.Uri);
                    }
                    break;
                case NavigationMode.Back:
                    this.myFrame.NavigationService.GoBack();
                    break;

                case NavigationMode.Forward:
                    this.myFrame.NavigationService.GoForward();
                    break;
                case NavigationMode.Refresh:
                    this.myFrame.NavigationService.Refresh();
                    break;
            }

            Dispatcher.BeginInvoke(DispatcherPriority.Loaded,
                (ThreadStart)delegate()
                {
                    DoubleAnimation da = new DoubleAnimation(1.0d, new Duration(TimeSpan.FromMilliseconds(200)));
                    this.BeginAnimation(OpacityProperty, da);
                });
        }


        private bool _allowDirectNavigation = false;
        private NavigatingCancelEventArgs _navArgs = null;

 

场景:某个导航页面中的按钮点击完成之后使Frame的Visibility为Collapsed

最初始的想法是从Page页面中获取宿主控件然后对宿主控件即Frame直接进行操作

查阅MSDN之后没有找到相对应的方法或者属性,只能修改宿主的长宽及ICON

所以变通的想到使用导航结束的事件来传递消息,来使Frame能够获取想要传达的信息,需要按照特定约定

约定:当导航结束后,myFrame_Navigated事件中查看Frame的Content如果是Page且Visibility为Collapsed则改变Frame的Visibility

   private void myFrame_Navigated(object sender, NavigationEventArgs e)
        {
            Page page = this.myFrame.Content as Page;
            if (page == null)
                return;
            if (page.Visibility == Visibility.Collapsed)
            {
                this.Visibility = Visibility.Collapsed;
                this.myFrame.NavigationService.GoBack();
            }
        }

 

目录
相关文章
|
数据挖掘
你需要的导航网站,这里都有
1、书享家(电子书资源导航)http://shuxiangjia.cn/ 2、学吧导航(自学资源导航)https://www.xue8nav.com/ 3、科塔学术(学术资源导航)https://site.sciping.com/
651 0
|
架构师 开发者
导航控件|学习笔记
快速学习导航控件。
导航控件|学习笔记
|
开发者
导航控件| 学习笔记
快速学习导航控件。
|
前端开发 开发者 容器
吸顶导航 |学习笔记
快速学习 吸顶导航
121 0
|
前端开发 容器
Bootstrap教程(20)--选项卡式导航、胶囊式导航、面包屑导航
本文目录 1. 概述 2. 选项卡式导航 2.1 普通选项卡导航 2.2 等宽选项卡导航 3. 胶囊式导航 3.1 普通胶囊式导航 3.2 垂直胶囊式导航 4. 面包屑导航 5. 小结
694 0
Bootstrap教程(20)--选项卡式导航、胶囊式导航、面包屑导航
|
算法 安全
一句话次导航相关问题
一句话次导航相关问题,SEOer必看: 1、次导航锚文本里,我可以做几个词? 没有一句话次导航的情况下,最多写3个。如果认真写了一句话次导航,则里面可以包含5-8个。不要超过10个。 2、如果主导航上有了某个关键词,我需要在次导航上再做吗?
132 0
侧边栏菜单导航
在线演示 本地下载
1230 0