zoukankan      html  css  js  c++  java
  • Windows Phone 8仿Toast弹出通知。

    Wp8后台收到消息可以弹出Toast通知,可是应用在前台跑的时候却好像没有办法弹出Toast通知。而需求上有要求要弹出Toast通知,在这种情况下,就开始考虑是否能够做一个类似Toast的弹出通知呢?

    首先,要弹出通知的那部分代码是一个比较耗时的操作,开启了一个线程让它去跑,而此时,应用的页面可能导航到了其他的页面去了。所以这个通知必须要能够通知的时候,弹出在当前的页面中。App.xaml.cs里面有 public PhoneApplicationFrame RootFrame 这样一个属性,这个属性存放的是显示应用的框架。从RootFrame我们可以获取应用的当前的页面。当我们获取到页面后,从页面的虚拟化树中可以抓取到页面最外层的Grid。此时,我们将我们要弹出的弹出框插入到该Grid中,这样弹出框就弹出来了。而隐藏的时候,只要再将弹出框给Remove就OK了。

    这样只是完成了弹出和消失,而Toast进来的时候是有一个从上到下进入的动画,而出去的时候,有一个从下到上消失的动画。我们还要在弹出和隐藏的时候加加一个动画上去。另外Toast过一段时间会自动消失,所以在弹出时,要添加一个计时器,定时关闭。这样一个类似Toast的通知便完成了。

    关键代码

    private void Insert()
            {         
                var frame = Application.Current.RootVisual as Microsoft.Phone.Controls.PhoneApplicationFrame;
                _page = frame.Content as PhoneApplicationPage;          
                var grid = System.Windows.Media.VisualTreeHelper.GetChild(_page, 0) as Grid;
                if (grid.RowDefinitions.Count > 0)
                {
                    Grid.SetRowSpan(this, grid.RowDefinitions.Count);
                }
                grid.Children.Add(this);
                //添加动画           
            }
    private void Remove()
            {
                var frame = Application.Current.RootVisual as Microsoft.Phone.Controls.PhoneApplicationFrame;
                var page = frame.Content as PhoneApplicationPage;
                var grid = System.Windows.Media.VisualTreeHelper.GetChild(page, 0) as Grid;          
                grid.Children.Remove(this); 
                //添加退出动画      
            }
    

      

  • 相关阅读:
    celery的使用和原理
    内核通知链
    数据流中的中位数
    二叉搜索树的后序遍历序列
    Javascript设计模式系统讲解与应用,JS设计模式详解
    微服务系列之ZooKeeper注册中心和Nacos注册中心
    微信小程序开发详解:小程序入门与实战-纯正商业级应用技术
    Java零基础该怎么去学习Java?学好Java应该如何去做?
    Flutter从入门到进阶实战携程网App项目详解
    Python升级3.6强力Django+杀手级Xadmin打造在线教育平台
  • 原文地址:https://www.cnblogs.com/qingfengwutong/p/3187266.html
Copyright © 2011-2022 走看看