wp之动态初始屏幕
使用过windows phone版QQ的开发者,对于QQ的动态初始屏幕肯定都很关注是如何实现的,关于这个问题首先必须要了解Windows Phone的应用程序生命周期,对于相关的文章博客园内已经有大牛给出了详细的分析,这里就不多说了,详细请看Terry 龙的windows phone7不温不火学习系列文章。
Windows Phone初始屏幕可以通过替换根目录下的SplashScreenImage.jpg来实现,但是这必须要重新发布XAP,用户需要重新安装应用就变得比较麻烦了。很多人可能会想到这样的方案,那就是在主程序加载之前放置控件遮挡主屏幕,然后等程序加载完之后再把相关的控件隐藏起来。
位于System.Windows.Controls.Primitives下的Popup提供一种在单独窗口中显示内容的方法,该窗口相对于指定元素或屏幕坐标浮动于当前应用程序窗口之上,这正是我们所需要的控件,它的属性Child是UIElement类型的,因此我们可以创建用户控件赋值给它。此处我们在用户控件中仅仅只是放置一张图片而已,然而如果想做成动画效果,可以放置Canvas控件来实现。代码如下:
1 <Grid x:Name="LayoutRoot"> 2 <Image Width="480" Height="800" Source="/Images/1.jpg"/> 3 </Grid>
由于我们要使用Popup遮挡住界面,接着才是初始化应用程序,但是如果我们不用多线程去操作的话,就会造成界面动画假死,这会成为不好的体验,因此我们可以使用BackgroundWorker来创建后台程序,去执行初始化操作。代码如下:
1 BackgroundWorker m_backgroundWorker = new BackgroundWorker(); 2 3 Popup m_popup = new Popup { IsOpen = true, Child = new DynamicScreen() }; 4 5 m_backgroundWorker.DoWork += (s, e) => Thread.Sleep(5000);//添加加载代码,注意线程安全 6 m_backgroundWorker.RunWorkerCompleted += 7 (s, e) => Dispatcher.BeginInvoke(() => m_popup.IsOpen = false); 8 m_backgroundWorker.RunWorkerAsync();
需要提醒的是用户控件内用于显示的内容必须不小于480*800,否则将无法完全覆盖主界面,且必须要将默认的初始屏幕图片SplashScreenImage.jpg删除,如果不删除的话,会出现黑闪的情况,具体情景还是要自己动手一下才会了解。