//个人YY部分,建议略过
接触windowsphone算比较早的,从htc的莫扎特就开始了解wp这个系统,那时候的愿望就是能拥有一部lumia800,结果大二才得到我的lumia720。当时那感觉真是“我的lumia时尚时尚最时尚”。wp系统的应用一直为人所诟病,但恰恰是因为一款wp应用让我彻底对wp着了迷,它就是TouchStudio,现在改名为TouchDevelop。它可以让你使用手机编写程序,实现各种各样的小功能甚至小型游戏,当然它开放的手机接口没有原生wp开发那么多,但是像反转静音和摇动播放下一曲这样的功能几行代码就可以搞定。高中毕业选择了梦寐以求的软件专业,买了一台笔记本电脑,第一件事就是安装vs2010,跟着Bob Tabor的wp初学者教程学习,兴奋之情难以言表。上了大学后看到wp行业并不景气,实验室做项目移动端完全都是Android,iOS至少有一个,但是这并没有影响到我,在用Asp.net做实验室项目的同时也不断关注着wp的动态,但是由于没有实际项目练手,也算是荒废了两年。
最近一个学长做了一款Android应用,于是我就有了把它移植到wp平台上的想法,请教了他一些问题后准备开工。开发环境手机解锁什么的早已万事具备,虽然说我接触的早但是经过系统不断更新,我以前知道的api很多都已经变了样,就是说我还是个初学者,不过什么都是慢慢摸索着来的,有兴趣搞就好了。
//YY结束
我准备先搞首次启动页面的介绍页,先来看看我判断应用是否首次启动的代码(此代码还没有经过实测,主要是提供思路)
// 判断此主版本应用是否第一次启动,以显示介绍页面
var localSetting = Windows.Storage.ApplicationData.Current.LocalSettings;
while (true)
{
var oldVersion = localSetting.Values["LastRecordVersion"];
if (oldVersion != null)
{
if (Version.Parse(oldVersion.ToString()).Major >= Version.Parse(AppInfo.GetVersion()).Major)
{
if (!rootFrame.Navigate(typeof(MainPage), e.Arguments))
{
throw new Exception("Failed to create initial page");
}
break;
}
}
if (!rootFrame.Navigate(typeof(Present), e.Arguments))
{
throw new Exception("Failed to create introduction page");
}
break;
}
光是本地存储就花费了我不少时间,还到处去找IsolatedStorageSetting,还好我查api的功力深厚,最后让我找到了它。
这段代码其实并不单纯的判断是否首次启动,如果不是首次启动的话我们还要判断一发,也就是第二个判断语句:如果本地存储中的主版本号小于当前应用的主版本号也还是乖乖跳去介绍页。接下来贴上获取当前应用的版本号的代码(AppInfo.GetVersion())
class AppInfo
{
//获取应用版本号
public static String GetVersion()
{
String version = String.Empty;
XElement ele = XElement.Load("AppxManifest.xml");
foreach (var e in ele.Elements())
{
if (e.Name.LocalName.Equals("Identity"))
{
version = e.Attribute(XName.Get("Version")).Value;
break;
}
}
return version;
}
}
其实就是个读取xml的代码,这个xml文件里还有一些其他的信息,同样的方法获取,有兴趣的可以去看看。
接下来就是介绍页面了,主要就是用到FlipView控件,xaml代码
<FlipView SelectionChanged="FlipView_SelectionChanged">
<Image Source="Content/image/guide_1.png"/>
<Image Source="Content/image/guide_2.png"/>
<Image Source="Content/image/guide_3.png"/>
<TextBlock />
</FlipView>
我在这里加了三张图片,和一个TextBlock,为什么加这个TextBlock接下来听我细细道来
为FlipView控件添加SelectionChanged事件,代码如下
private void FlipView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
FlipView flip = sender as FlipView;
if (flip.SelectedIndex == 3)
{
Frame.Navigate(typeof(MainPage));
}
}
代码很简单,判断flip滑到哪里了,如果SelectedIndex等于3也就是滑到TextBlcok这里的时候就跳转到应用主页面。其实这个TextBlock只是起到一个填充位置的作用,当然我这只是一个偷懒的办法,一定还有其他好办法的。
另外有些应用程序不想直接进入主页面,而是想在这之前做一些其他操作(比如登个录,注个册),或者想点击立即体验按钮再进入主页面,也很简单,只要在事件中判断FlipView是否滑到最后一张图,进行相应的操作就好了。