WP学习笔记

 

Windows Phone 开发先决条件

有C#编程基础

使用Visual Studio开发,如果会Expression Blend更好

了解过Silverlight,但不是必要条件

移动开发主流手机系统

1 IPhone:IOS   Objective-C
2 Google:Android Java
3 Microsoft:Windows Phone C#,VB.Net,C++

 


Window Phone 7概述

    Windows Phone 是一个诞生于移动互联网以及智能手机爆发期间的操作系统,是微软绝地反击苹果iPhone和谷歌Android的利器。Windows Phone 是微软在移动领域的一次冲击,是一次风险与机遇共存的挑战。Windows Phone 7是Windows Phone系列的第一个版本,它的诞生意味着移动领域的竞争更加激烈。同时,Windows Phone 7是在综合iPhone和Android的优点与缺点的基础上进行设计和研发的,他有着自己的独特的有事和更大的完善空间。诺基亚宣布使用Windows Phone作为主要操作系统之后,移动操作系统三足鼎立的局面将会逐渐形成。

    Windows Phone 的技术体系与Windows Mobile时代的技术体系是完全不同的,他在技术上颠覆了微软以前的操作系统的技术框架。Windows Phone的技术体系分为两个独立的模块,一个是用于开发普通应用程序的框架——Silverlight框架,一个是专门用于开发手机游戏的框架——XNA框架。两个框架相互独立,分工明确,程序员可以更具自己开发的应用程序的性质选择。


Windows Phone的功能特点 

统一于一致性
    ·统一的入口 Start Screen
    ·统一的风格 Metro
简洁
    ·Metro设计风格
    ·Phone for dummies,操作简便
整合
    ·应用之间整合eMail Hub整合Office Mobile
    ·整合操作界面Calendar Hub,整合Outlook Calendar,Live Calendar等等
    ·与云端的整合People Hub,整合了Windows Live和facebook
Smart Phone 2.0的概念
    ·不仅仅包含Attribute和Properties
    ·而且还包含Methods和Events

 Windows Phone的硬件框架

显示屏
  480×800 QVGA
  320×400 HVGA

触摸屏:四个以上的触摸点

传感器(Sensors)
  A-GPS
  重力加速器(Accelerometer)
  电子罗盘(Compass)
  感光器(Light Sensor)

照相镜头:500万以上的像素(500万以上的摄像头能够清楚的拍摄图像,比如条形码,用location服务记录位置和图像)
硬件按钮
  回退、开始、搜索

多媒体支持
  解码器(Codec)加速

内存
  256MB以上RAM
  8GB以上Flash

GPU
  DirectX 9加速(GPU能够加速图像效果,体验更加流畅) 

CPU
  ARMv7
  Cortex

 

Windows Phone 7 软件框架

 

Windows Phone 7软件基础架构分为输入/输出、多媒体、数据操作、.NET、统一性、云端整合几大架构,如图所示。Windows Phone 7程序员可以使用Silverlight for Windows Phone 7技术为开发人员提供的应用程序接口(API)直接访问这些框架模块,从而方便地操作Windows Phone 7的硬件实体,完成所需要的功能。
其中.NET模块是Windows Phone 7软件基础框架的核心,负责将其他的模块进行统一调度、整合,并提供和生成了各模块所需要的事件,参与了底层代码与界面UI的交互。

 

 

 

Windows Phone 软件架构

Windows Phone 应用平台组成

 

Windows Phone 的平台架构分为两大部分:一是Screem--直接的展现在手机前端的技术架构;二是Cloud--使用网络服务的技术架构。
1. Screen(屏幕)
     在支持Windows Phone 7 应用程式开发的Framework 方面,Windows Phone 7 提供了两种Framework,分别是Silverlight Framework 与XNA Framework。 Silverlight Framework 是以XAML 文件为基础的应用程序设计概念,透过事件驱动机制的帮助,提供与开发Windows 应用程式和Silverlight 应用程式相同的程序开发体验。 XNA Framework 主要的目的则是用来支持XNA开发技术的游戏程序,这样可以让手机上的游戏达到专业的游戏机的流畅游戏效果。
Silverlight Framework 和XNA Framework 都是架构在NET 平台上的应用程式开发架构,只要稍微修改现有的Silverlight 应用程序或XNA 应用程序,例如修改屏幕的高度和宽度,并加入手机特有的感测器相关的功能,就可以将Silverlight 应用程式或XNA 应用程式移植到Windows Phone 7 上执行。不过Windows Phone 7系统的Silverlight Framework 、XNA Framework和非手机上的还是有一些差距的,在手机系统的Framework会有一些手机特有的API,同时手机上的Framework也缺少了一部分非手机的Framework的API,即使是同一个控件在手机上和非手机上的API也会有一些较大的差距,这需要在实际的开发中去区分开来。
2. Cloud(云端)
     Windows Phone 7的云端机构主要分为两大块:一块是Developer Portal Services:这部分主要用于开发者应用程序的注册、认证、发布、更新管理以及Marketplace的付费管理等。另外一块是Cloud Service:这部分主要用于开发者使用的云服务API,如maps,feeds,social,以及云计算(Azure)服务。
Windows Phone 7 支持的Location 功能可以和云端服务提供的Location 服务整合,协助应用程式查询装置的实际位置,在装置位置改变时得到通知,判断装置移动的方向和速度,或是计算两点之间的距离。
Windows Phone 7 应用程式也可以使用到网络的云端服务包括Windows Azure、Xbox LIVE 服务、Notification 服务、Location 服务、以及其他各种协力厂商提供的Web 服务和WCF 服务,甚至是REST 服务(Representational State Transfer) 等先进的技术,为Windows Phone 7 应用程式提供更丰富的功能支持。透过云端服务的帮助,能够让使用者在使用不同的电脑装置时都可以存取到共同的资料,享受相同的服务,是支持发展新一代的行动运算解决方案的重要基础。透过云端服务的帮助,你不但能够使用到超越Windows Phone 7 本身内建的功能以外的更多功能,而且云端服务是24 小时不间断的服务,不会因为手机的电池电力耗尽而无法取得服务。
Microsoft 提供的云端服务中,Notification 服务能够协助Windows Phone 7 应用程式以订阅的方式收到欲处理的事件,节省定时询问特定的资料或状态耗费的电力。 Location 服务能够利用Wi-Fi、Cellular、和GPS 等资料,为Windows Phone 7 应用程式提供定位相关的功能。另外,Identity 服务能够提供身份验证功能,Feed 服务能够提供资料喂入服务,Social 服务能够提供社群服务,而Map 服务则可以提供地图与导览服务。Windows Phone 7 应用程式开发完成后,程式设计师可以利用Portal 服务将开发好的应用程式发布到手机线上软体商店(即Marketplace),让使用者购买和使用。

 

Windows Phone 开发平台

 

     建立一个Windows Phone手机应用你必须面对选取Silverlight Framework 或选取XNA Framework 做为应用程式开发基础的抉择。从图 所示的Framework 架构功能图可以看出,Silverlight Framework 与XNA Framework 的底层是一组共同的服务,提供感测器相关的功能,Location 功能,Live 服务功能,网路通讯功能,XNA 的音效API,以及XNA 的媒体API,而位于这一组共用服务底下的则是.NET Compact Framework,由.NET Compact Framework 提供基础程式开发协助,包括XML 文件处理,LINQ 语言整合查询, Isolated Storage 独立储存区,WCF 服务,与序列化等功能。

     Silverlight Framework 和XNA Framework 具有相同的本质,差别在于Silverlight Framework 和XNA Framework 支持的是不同类型的应用程式。Silverlight Framework 支持开发一般的Windows Phone 7 应用程式,提供程式设计师设计应用程式需要的控制项以及显示功能,当然也支持动画功能供应用程式使用,而XNA Framework 主要的用途是支持程式设计师设计游戏相关的程式,包括画面连续更新显示的协助,Content Pipeline 游戏内容处理功能,以及2D/3D 的图形显示。
选择开发Windows Phone 7 应用程式欲使用的Framework 之后并未限制应用程式不能使用另外的Framework 提供的功能,也就是说选择Silverlight Framework 作为应用程式发展基础的应用程式还是能够透过参考组件的方式使用到XNA Framework 提供的功能,反之,选择XNA Framework 作为应用程式发展基础的应用程式也同样能够透过参考组件的方式使用到Silverlight Framework 提供的功能

 

Windows Phone7 环境搭建

操作系统
  操作系统为Windows Vista SP2或者Windows7 硬件
  系统盘需要至少3GB的空间   内存空间达到2GB或者以上 显卡
  如果开发XNA应用,需要具备DirectX 10以上的显示卡,并且安装WDDM1.1驱动   支持DirectX 10以上的显示卡主要用于Windows Phone模拟器GPU的加速

Windows Phone 7工具安装

安装Windows Phone Developer Tool工具(Windows Phone Developer Tool中包含了SDK、欲行模拟器和编程工具)
安装Windows Phone Developer Tool 7.1Beta 安装Microsoft Visual Studio 2010 Service Pack1

 

Windows Phone开发-主题

微软提供了两套主题,一种背景色是黑色的,一种是白色的。黑色微软也是做过好多实验,并加上用户体验调查,最终确定了黑白两个主题。

建议用户使用黑色主题,因为黑色对电池的电量消耗要低。黑底白字,看起来更舒服

界面采用Metro风格,有大小不同的瓷砖,用户可以根据心情来更换主题色。

 

 

Windows Phone开发-屏幕方向

竖屏(Portrait,也叫纵向或垂直模式)与横屏(Landscape,也叫横向或水平模式)
在Visual Studio可以新增竖屏(Protrait)和竖屏(Landscape)的页面
页面可以支持竖屏、横屏或者同时支持两者
如果页面支持PortraitOrLandscape,当用户翻转电话的时候页面会自动改变屏幕方向
不能通过代码来改变屏幕方向
可以强制页面只支持横屏和竖屏
如果支持方向为ProtraitOrLandscape,那么系统会自动翻屏
但是如果需要重新布局,需要重写OrientationChanged
 1  public GridPage()
 2         {
 3             InitializeComponent();
 4             SupportedOrientations = SupportedPageOrientation.PortraitOrLandscape;
 5             OrientationChanged += new EventHandler<OrientationChangedEventArgs>(My_OrientationChanged);
 6         }
 7 
 8         void My_OrientationChanged(object sender, OrientationChangedEventArgs e)
 9         {
10             switch (e.Orientation)
11             {
12                 case PageOrientation.LandscapeLeft:
13                 case PageOrientation.LandscapeRight:
14                     TitlePanel.Visibility = Visibility.Collapsed;
15                     break;
16                 case PageOrientation.PortraitDown:
17                 case PageOrientation.PortraitUp:
18                     TitlePanel.Visibility = Visibility.Visible;
19                     break;
20             }
21         }

 

 

 

Windows Phone开发-应用程序生命周期 

Windows Phone 是一个多任务的操作系统
  只有唯一一个第三方应用程序在前台运行
  提供一致的用户体验
  节省电源的消耗
  当用户离开当前程序的页面时,应用程序会给操作系统所终止

任何使用应用程序都可能发生中断
  用户的操作
  外部的事件

中断的发生是不可预知的
  屏幕锁、呼入电话、短消息、提醒功能、低电量、程序切换、用户点击开始按钮

 

Windows Phone开发-墓碑机制(Tombstone(墓碑化,冻结))

当用户从当前程序中导航到别的程序时,应用程序可能会Tombstoning
  操作系统会保存一些系统状态信息,然后冻结该应用程序
  当用户导航回该程序的时候,操作系统会重启该程序,然后恢复一些系统状态信息
程序员必须编写代码来管理程序的生命周期
  保存和恢复状态信息
  保持用户体验的一致性(用户点击回退按钮能回到之前的操作)

 

 

墓碑机制是微软Windows Phone 7中的一个程序运行规则。说简单点,就是手机上一个任务被迫中断时(如有电话打入),系统记录下当前应用程序的状态后,(像把事件记录在墓碑上一样),然后中止程序。当需要恢复时,根据“墓碑”上的内容
,将程序恢复到中断之前的状态。这样的一种机制就是“墓碑机制”,伪多任务,休眠非活动状态的程序
变为墓碑后,运行状态时的数据都被清掉了


10秒钟原则:程序启动或关闭系统只给10秒钟的时间,超时就会被系统终止掉.
7.5 墓碑数量限定5个,但8的增加到8个,超过的话就将之前的记录挤掉

 

 

 

     图演示了Windows Phone应用程序的生命周期及开发中的执行方法顺序。该图中,圆圈表示应用程序的状态,矩形显示应用程序应管理其状态的应用程序级别或页面级别的事件。当启动一个应用程序的时候会先触发Application的Launching事件,然后跳转到默认的首页,调用该页面的OnNavigatedFrom方法。程序离开运行状态的时候有两种去向,一种是关闭应用程序,这种情况下会触发Application的Closing事件,程序处于关闭的状态;另外一种情况是进入休眠的状态了,这时候会触发Application的Deactivated事件,程序处于休眠的状态。当手机的内存呗好近,程序将会由休眠状态转为墓碑状态,表示程序之前存储在内存中的数据都被清空掉了,只剩下一个状态。程序从休眠状态或者墓碑状态恢复到运行状态的时候,会触发Application的Activated事件,然后调用当前页面的OnNavigatedTo方法进入程序的页面。
    在Windows Phone应用生命周期中需要注意一些问题,在Launching事件中欧执行非常少量的代码,不要执行资源密集型操作,例如,访问独立存储。在Windows Phone的Sliverlight框架程序中,退出程序的唯一方法就是按Back键。当Back Stack中不存在页面时会退出,目前系统没有提供任何Exit方法来以代码的方式结束程序。在程序退出时会触发Application中最后一个事件,Closing。在这个事件中我们可以释放一些使用的资源,保存数据等。要注意的是,如果一个程序从墓碑状态被结束,是不会触发此事件的。关闭程序的时间呗限制在10s,超过这个时间程序会被终止掉。

 Windows Phone开发-数据绑定

 1  <ListBox ItemsSource="{ Binding  Students }">
 2                 <ListBox.ItemTemplate>
 3                     <DataTemplate>
 4                         <StackPanel Orientation="Vertical">
 5                             <TextBlock Text="学号:" Foreground="Blue"></TextBlock>
 6                             <TextBlock Text="{Binding StuId}"></TextBlock>
 7                             <TextBlock Text="姓名:" Foreground="Blue"></TextBlock>
 8                             <TextBlock Text="{Binding Name}"></TextBlock>
 9                             <TextBlock Text="年龄:" Foreground="Blue"></TextBlock>
10                             <TextBlock Text="{Binding Age}"></TextBlock>
11                             <TextBlock Text="家庭住址:" Foreground="Blue"></TextBlock>
12                             <TextBlock Text="{Binding Address}"></TextBlock>
13                             <TextBlock Text="-----------------------"></TextBlock>
14                         </StackPanel>
15                     </DataTemplate>
16                 </ListBox.ItemTemplate>
17             </ListBox>

 

 1   private List<Student> _Students = null;
 2         public List<Student> Students { get { return _Students; } }//必须要有get访问器
 3 
 4         // 构造函数
 5         public MainPage()
 6         {
 7 
 8             if (_Students == null)
 9             {
10                 _Students = new List<Student>();
11                 _Students.Add(new Student() { StuId = "001", Name = "张一", Age = 12, Address = "杭州市滨江区江南大道1" });
12                 _Students.Add(new Student() { StuId = "002", Name = "张二", Age = 12, Address = "杭州市滨江区江南大道2" });
13                 _Students.Add(new Student() { StuId = "003", Name = "张三", Age = 12, Address = "杭州市滨江区江南大道3" });
14                 _Students.Add(new Student() { StuId = "004", Name = "张四", Age = 12, Address = "杭州市滨江区江南大道4" });
15                 _Students.Add(new Student() { StuId = "005", Name = "张五", Age = 12, Address = "杭州市滨江区江南大道5" });
16 
17             }
18             InitializeComponent();
19             DataContext = this;
20 
21         }

 

 Windows Phone开发-隔离存储空间 

所有的文件IO操作都被限制在隔离存储空间里面
在隔离存储空间里可以增加、删除、修改目录和文件
在隔离存储空间里面可以存储程序配置信息
注意:
Windows phone下的隔离存储空间没有配额限制
只保存需要的信息,删除无用的信息
把数据同步到云端,减小本地存储
 

 

命名空间
using System.IO;
using System.IO.IsolatedStorage;

重要的类
IsolatedStorageFile-用于操控隔离存储空间里面的目录及文件
IsolatedStorageFileStream-用于读写操控隔离存储空间里面的文件流
IsolatedStorageSetting-用于存储程序配置信息的Dictionary

 

 代码操作

 1 //文件夹操作
 2 //检查文件夹是否存在
 3   using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
 4             {
 5                 if (file.DirectoryExists(_FolderName))
 6                 {
 7                     MessageBox.Show(_FolderName + "文件夹已存在");
 8                 }
 9                 else
10                 {
11                     MessageBox.Show(_FolderName + "文件夹不存在");
12                 }
13             }
14 
15 //创建文件夹
16   using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
17             {
18                 file.CreateDirectory(_FolderName);
19             }
20 
21 //删除文件夹
22   using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
23                 {
24                     if (file.DirectoryExists(_FolderName))
25                     {
26                         file.DeleteDirectory(_FolderName);
27                     }
28                 }

 

 1 //文件操作
 2 //检查文件是否存在
 3             using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
 4             {
 5                 if (file.FileExists(_FileName))
 6                 {
 7                     MessageBox.Show(_FileName + "文件存在!");
 8                 }
 9                 else
10                 {
11                     MessageBox.Show(_FileName + "文件不存在!");
12                 }
13             }
14 //创建文件
15             using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
16             {
17                 FileStream fileStream = file.CreateFile(_FileName);
18                 fileStream.Close();
19 
20             }
21 //删除文件
22                 using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
23                 {
24                     if (file.FileExists(_FileName))
25                     {
26                         file.DeleteFile(_FileName);
27                     }
28                 }

 

 

1 //读写配置
2 //读配置
3             if (IsolatedStorageSettings.ApplicationSettings.Contains(ApplicationSettingKey))
4             {
5                 SettingTextBox.Text = IsolatedStorageSettings.ApplicationSettings[ApplicationSettingKey] as string;
6             }
7 //写配置
8         IsolatedStorageSettings.ApplicationSettings[ApplicationSettingKey] = this.SettingTextBox.Text.Trim();
9             IsolatedStorageSettings.ApplicationSettings.Save();

 

 1 //文件操作
 2 //读文件
 3             using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
 4             {
 5                 using (IsolatedStorageFileStream fileStream = file.OpenFile(_FileName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
 6                 {
 7                     StreamReader sr = new StreamReader(fileStream);
 8                     MessageBox.Show(sr.ReadToEnd());
 9                     sr.Close();
10                 }
11             }
12 //写文件
13  using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
14             {
15                 using (IsolatedStorageFileStream fileStream = file.OpenFile(_FileName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
16                 {
17                     StreamWriter sw = new StreamWriter(fileStream);
18                     sw.WriteLine(this.ContentTextBox.Text.Trim());
19                     sw.Close();
20                 }
21             }

 Windwows Phone开发-页面导航

Silverlight for Windows Phone使用以页面为基础的导航模型
  与web的页面导航模型类似
  每个独立的页面都有一个唯一的URI
  每个独立的页面都是没有状态的
  能够传递参数
  能够传递对象
  能够重写地址

 

 

 一般导航

1             <HyperlinkButton Content="音乐" Height="53" HorizontalAlignment="Left" Margin="65,83,0,0" Name="MusicHyperlinkButton" VerticalAlignment="Top" Width="204" NavigateUri="/Views/Music.xaml" />
2             <HyperlinkButton Content="视频" Height="53" HorizontalAlignment="Left" Margin="65,181,0,0" Name="MovieHyperlinkButton" VerticalAlignment="Top" Width="204" NavigateUri="/Views/Video.xaml" />
1 NavigationService.Navigate(new Uri("/Views/Picture.xaml", UriKind.Relative));

 

别名导航

App.xmal文件

1     <!--应用程序资源-->
2     <Application.Resources>
3         <nav:UriMapper x:Key="MyUriMapper">
4             <nav:UriMapper.UriMappings>
5                 <nav:UriMapping Uri="Music" MappedUri="/Views/Music.xaml" />
6                 <nav:UriMapping Uri="Music/{song}" MappedUri="/Views/Music.xaml?Song={song}" />
7             </nav:UriMapper.UriMappings>
8         </nav:UriMapper>
9     </Application.Resources>

 

App.xmal.cs

1 this.RootFrame.UriMapper = Resources["MyUriMapper"] as UriMapper;

 

使用别名导航

1             <HyperlinkButton Content="音乐" Height="53" HorizontalAlignment="Left" Margin="252,83,0,0" Name="MusicHyperlinkButton1" NavigateUri="Music"   VerticalAlignment="Top" Width="204" />
2             <HyperlinkButton Content="音乐-有参" Height="53" HorizontalAlignment="Left" Margin="254,181,0,0" Name="MusicHyperlinkButton2" NavigateUri="Music/song1"   VerticalAlignment="Top" Width="204" />

 

接收带参数的uri

1             if (NavigationContext.QueryString.Count > 0)
2             {
3                 if (!string.IsNullOrEmpty(NavigationContext.QueryString["Song"]))
4                 {
5                     SongNameTextBlock.Text = NavigationContext.QueryString["Song"];
6                 }
7             }

NavigationService默认不能传递对象,

可用方法

•使用App类的静态属性
•把对象分解使用QueryString来传递 
 1 //App.xaml.cs
 2      public static MusicClass Music { get; set; }
 3 //源页面
 4   App.Music = new MusicClass
 5             {
 6                 FileName = "I_believe.mp3",
 7                 SongName = "我相信"
 8             };
 9             NavigationService.Navigate(new Uri("Music", UriKind.Relative));
10 //目标页面
11           if (App.Music != null)
12             {
13                 MusicClassTextBlock.Text = "歌曲名字" + App.Music.SongName + "\n文件:" + App.Music.FileName;
14             }

 

Windows Phone开发-重写回退键

为什么要重写回退键呢?
  用户不小心点到回退键,并不是用户的意愿
  有些操作不能回退到上一个界面,如网上付款操作
  需要做一些退出提示,防止意外退出。

 

 操作

1 <!--在源页面xaml头部添加回退键事件-->
2 BackKeyPress="PhoneApplicationPage_BackKeyPress"
  private void PhoneApplicationPage_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (MessageBox.Show("是否真的推出?", "提示", MessageBoxButton.OKCancel) == MessageBoxResult.Cancel)
            {
                e.Cancel = true;
            }
        }

 

Windows Phone-开发-应用程序栏

windows Phone所谓的应用程序栏,就是指他的菜单.windows Phone的菜单位置固定,位于屏幕下方,与回退键,开始按钮,搜索按钮上方,不管横屏竖屏,位置都是不变的,唯一改变的是文字方向.

xmal显示菜单栏

<!--演示 ApplicationBar 用法的示例代码-->
    <phone:PhoneApplicationPage.ApplicationBar>
        <shell:ApplicationBar IsVisible="False" IsMenuEnabled="True">
            <shell:ApplicationBarIconButton IconUri="/icons/appbar.favs.addto.rest.png" Text="发短信" Click="ApplicationBarIconButton_Click"/>
            <shell:ApplicationBarIconButton IconUri="/icons/appbar.feature.email.rest.png" Text="发邮件" Click="ApplicationBarIconButton_Click_1" />     
        </shell:ApplicationBar>
    </phone:PhoneApplicationPage.ApplicationBar>

 

xmal.cs显示菜单栏

 1        // 构造函数
 2         public MainPage()
 3         {
 4             InitializeComponent();
 5 
 6             // 用于本地化 ApplicationBar 的示例代码
 7             BuildLocalizedApplicationBar();
 8         }
 9 
10         // 用于生成本地化 ApplicationBar 的示例代码
11         private void BuildLocalizedApplicationBar()
12         {
13             // 将页面的 ApplicationBar 设置为 ApplicationBar 的新实例。
14             ApplicationBar = new ApplicationBar();
15 
16             // 创建新按钮并将文本值设置为 AppResources 中的本地化字符串。
17             ApplicationBarIconButton appBarButton = new ApplicationBarIconButton(new Uri("/Assets/AppBar/appbar.add.rest.png", UriKind.Relative));
18             appBarButton.Text = AppResources.AppBarButtonText;
19             ApplicationBar.Buttons.Add(appBarButton);
20 
21             // 使用 AppResources 中的本地化字符串创建新菜单项。
22             ApplicationBarMenuItem appBarMenuItem = new ApplicationBarMenuItem(AppResources.AppBarMenuItemText);
23             ApplicationBar.MenuItems.Add(appBarMenuItem);
24         }

 

如果说页面的菜单项是根据逻辑产生的,那么用C#代码结合逻辑生成导航要比第一种好得多.第一种适合页面导航比较固定的,没有逻辑判断的.

Windows Phone 开发-启动器与选择器

Windows Phone应用程序执行模型决定了每个应用程序只能在自己的沙盒里面运行
  应用程序不能直接访问其他存储信息,例如联系人的信息等
  应用程序不可以直接访问其他功能,例如电话和短消息功能等

 

启动器和选择器为应用程序提供间接访问这些内置功能的方法
启动器和选择器运行时操作系统可能会终止当前的应用程序

 命名空间

using Microsoft.Phone.Tasks;

 

启动器

启动一个内置的应用程序提供给用户使用
不会返回任何数据给调用的程序
例如SearchTask(搜索任务)
内置的启动器
EmailComposeTask-发邮件
MarketplaceDetailTask-应用的详细情况
MarketplaceHubTask-应用市场
MarketplaceRevewTask-当前在应用市场的信息
MarketplaceSearchTask-应用市场搜索
MediaPlayerLauncher-播放多媒体
PhoneCallTask-打电话
SearchTask-搜索任务
SmsComposeTask-发短信
WebBrowserTask-打开浏览器

 使用方法

1 //发送短信
2             SmsComposeTask sms = new SmsComposeTask();
3             sms.Body = "短信内容";
4             sms.To = "12345678910";
5             sms.Show();    

 

 

选择器

启动一个内置的应用程序提供给用户使用
返回一些数据给调用的程序
当用户完成操作时,调用程序会被重新激活,并接收返回的数据
注意:用户可能取消操作,这样返回null
例如:PhotoChooserTask(图片选择器)
内置的选择器
CameraCaptureTask-照相机
EmailAddressChooserTask-邮箱地址
PhoneNumberChooserTask-选择电话号码
PhotoChooserTask-选择图片
SaveEmailAddressTask-保存邮箱地址
SavePhoneNumberTask-保存手机号码

 

使用方法

在PhoneApplication类里面定义一个Chooser的field
在PhoneApplicationPage的构造函数生成该Chooser的实例,同时注册Completed事件处理函数
实现Completed事件处理函数
调用Show()方法启动选择器
 1  PhotoChooserTask phones;
 2         // 构造函数
 3         public MainPage()
 4         {
 5             InitializeComponent();
 6             phones = new PhotoChooserTask();
 7             //注册选择器完成事件
 8             phones.Completed += new EventHandler<PhotoResult>(phones_Completed);
 9         }
10 
11         void phones_Completed(object sender, PhotoResult e)
12         {
13             if (e.TaskResult == TaskResult.OK)
14             {
15                 BitmapImage bmpSource = new BitmapImage();
16                 bmpSource.SetSource(e.ChosenPhoto);
17                 image1.Source = bmpSource;
18                 textBlock1.Text = e.OriginalFileName;
19             }
20             else
21             {
22                 image1.Source = null;
23             }
24         }
25 
28 
29         private void button1_Click(object sender, RoutedEventArgs e)
30         {
31             //剪切图片
32             //phones.PixelHeight = 30;
33             //phones.PixelWidth = 80;
34             phones.Show();
35         }

 Windows Phone开发-推送通知服务

Windows Phone执行模型决定只有一个第三方的应用程序可以在前前台运行
第三方的应用程序不能在后台不断的往Cloud拉数据
微软提供推送通知服务给第三方应用程序取得更新通知的消息
服务器能主动发起通信
能够有效的降低电池的消耗

 

 推送通知的过程

WP设备到MPNS注册PN服务,并得到唯一的服务URI
WP设备把服务URI传递给Cloud服务,并注册
当有更新消息发生时,Cloud服务往MPNS发送更新消息
MPNS把更新消息发送到WP设备上
需要时WP设备往Cloud服务读取更多的数据
使用规范:
当前版本的Windows Phone只支持15个第三方应用程序使用推送通知服务
询问用户是否使用推送通知服务
为用户提供取消订阅的选项

 

Raw Notification(原生通知):可以发送任何格式的数据,应用程序可以根据需要加工数据,只有在程序运行的时候才接收消息
Toast Notification (吐司通知) :发送的数据指定为XML,如果程序正在运行,消息发送到应用中,如果程序没有在运行,弹出Toast 消息框显示消息,
Tile Notification(瓷砖通知) :发送的数据指定为XML,程序运行时不会接收消息,只有程序被Pin To Start时,更新数据才会发送到Start Screen的 Tile里面,包含三个属性:背景,标题,数目,每个属性都有固定的格式与位置,可以使用其中的属性,不一定三个一起使用,

 

 

在网上找到一个很形象的例子来解释,如下图:

Windows Phone 开发-销售应用

Marketplace是唯一发布应用的地方
用户能子啊Marketplace上购买和部署应用程序
每个开发者可以解锁3台手机,开发者能够编写和部署程序到解锁的手机上,现在可以部署10个app
应用程序分类为免费、收费和广告应用
应用程序可以包含try before buy功能
应用程序可以通过API判断应用程序是在那种模式下


准备
登录http://create.msdn.com
需要Live ID
姓名、地址、邮箱、电话、信用卡等信息
驾驶执照或者护照
账户类型
个人账户:需要缴费99$
学生账户:通过DreamSpark计划免费注册
公司账户:注册时需要验证公司信息

 

 资源分享

WP开发中心https://dev.windowsphone.com/zh-cn

应用提交中心http://create.msdn.com/zh-CN/

应用商店http://www.microsoft.com/windowsphone/zh-cn/default.aspx

MSDN开发文档http://msdn.microsoft.com/zh-cn/library/ff402535(v=vs.92).aspx

 视频资源

 

 

 

posted @ 2013-05-06 21:22  ゞ修ζ止符℡_R²º¹³  阅读(555)  评论(0编辑  收藏  举报