西安第一人民医院挂号:Windows Phone开发(2):WP7 Silverlight应用程序开发概要及相关知识

来源:百度文库 编辑:九乡新闻网 时间:2024/05/03 07:53:28
 这篇文章讲述如何创建,部署,调试以、运行Silverlight for Windows Phone应用程序及相关知识,同时介绍如何使用Microsoft Visual Studio 2010 Express for Windows Phone以及Windows Phone Emulator(模拟器)。在文章中会建立一个叫做SilverRadio的Silverlight for Windows Phone应用程序,我把这个程序取名为银光收音机,这个程序用于收听网络电台节目。

新建Silverlight for Windows Phone项目
点击 Start -> All Programs -> Microsoft Visual Studio 2010 Express -> Microsoft Visual Studio 2010 Express for Windows Phone 。启动Microsoft Visual Studio 2010 Express for Windows Phone


在File菜单下点击New Project。


在New Project对话框下选择Silverlight for Windows Phone目录,然后选择Windows Phone Application模板,项目名字取名为SilverRadio,然后点击OK按钮。


一个Silverlight for Windows Phone的项目就创建成功了,下面看看Windows Phone Application模板为我们创建了那些文件。

模板生成文件结构
在Solution Explorer(解决方案浏览器)可以看到Windows Phone Application 模板为SilverRadio项目所创建的目录结构以及文件。


App.xaml和App.xaml.cs定义程序的入口点,初始化应用程序级别的全局资源,显示程序的UI。
MainPage.xaml和MainPage.xaml.cs定义一个UI的页面,通常Silverlight程序的模板会生成一个叫做MainPage.xaml和MainPage.xaml.cs的UI页面作为默认的启动UI,但是UI启动页面不是必须取MainPage作为名字,只是一个惯例。如果需要修改第一个启动页面可以在WMAppManifest.xml 修改下面的NavigationPage属性。



ApplicationIcon.png是在Phone application List显示的图标,例如下面模拟器显示SilverRadio的图标。


Background.png用于 start screen(启动屏幕)显示的图标
SplashScreenImage.jpg 当程序启动的时候,在第一个页面启动之前显示的图片。
Properties\AppManifest.xml 程序打包的manifest(定义)文件。Silverlight程序最终会打成XAP包,这个XAP包是zip格式的文件,里面包含了程序需要用到的所有资源(例如图片,声音文件等等),依赖的第三方DLL等等。AppManifest.xml文件用于定义打包的结构。 下图为生成的xap的。


如果把SilverRadio.xap文件改名为SilverRadio.zip,然后解压,能看到程序发布时候所有的文件,这些文件的结构由AppManifest.xml来定义。




Properties\AssemblyInfo.cs 包含版本信息等metadata(源数据),这个文件与ASP.NET,Winform程序的AssemblyInfo.cs文件功能一致。

Properties\WMAppManifest.xml 与AppManifest.xml一样也是程序打包的manifest(定义)文件,但是WMAppManifest.xml专门指定Windows Phone Silverlight应用程序相关的metadata(源数据),例如上述的启动页面MainPage.xaml在WMAppManifest.xml里面定义。
一般来说不要手工修改WMAppManifest.xml和AppManifest.xml文件,可以通过项目属性文件来修改。如下图:




References 文件夹显示一些依赖的DLL等相关资源,由于Windows Phone开发工具的Beta把多个DLL合并到Microsoft.Phone.dll,所以模拟的项目包含了Microsoft.Phone.dll和Microsoft.Phone.Interop.dll两个Windows Phone相关的DLL,如果需要使用到其他DLL,例如在我们系列教材中会使用到LINQ for XML,那么会把System.Xml.Linq.DLL增加到References文件夹里面。

App.xaml讲解
在XAML中每个元素都对应Silverlight的一个类,任何类都XAML元素都可以找到一模一样名字的Silverlight类,例如可以找到System.Windows.Application类。把鼠标当道Application标签就能显示在.NET Framework对应的的类。


由于名字一一对应,所以有可能多于一个类被命名为同样的名字。因此引入命名空间的概念。使用了命名空间以后,XAML的解释器就可以找到正确的对应类。 没有XAML文件都会解析成.NET的类,然后编译成可执行文件(例如DLL或者exe),这个在下面讲述。
在XAML中xmlns属性用于声明命名空间, Beta版本Windows Phone Application模板自动生成以下命名空间。

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone">

其他页面还包含xmlns:d, xmlns:mc和mc:Ignorable,在上面的代码中,前两个是Silverlight重要的命名空间。
http://schemas.microsoft.com/winfx/2006/xaml/presentation是Silverlight核心(core) 命名空间,其包含Silverlight所有基础类,例如Application和Grid等等,如果在XAML使用该命名空间的类,不需要指定前缀,因此这是默认命名空间,换句话说,没有前缀的元素全部映射到该命名空间里面。
http://schemas.microsoft.com/winfx/2006/xaml是XAML的命名空间,其包含了XAML的相关特性。使用该命名空间需要指定前缀x,其可以用于元素或者属性,例如或者 x:Class="ClassName"。
clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone和clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone都是Silverlight for Windows Phone特有的命名空间,由于Beta版把下面所列出的CTP版包含的DLL合并到Microsoft.Phone.dll里面,所以这两个命名空间都位于Microsoft.Phone.dll里面。
# Microsoft.Phone.Shell.dll
# Microsoft.Phone.Controls.Navigation.dll
# Microsoft.Phone.Controls.dll
# Microsoft.Phone.Controls.WebBrowser.dll
# Microsoft.Phone.Notification.dll
# Microsoft.Phone.License.dll
# Microsoft.Devices.dll
# Microsoft.Phone.Execution.dll
# Microsoft.Phone.Info.dll
# Microsoft.Phone.Tasks.dll
Microsoft.Phone.Shell包含了应用程序全局信息的类,例如 PhoneApplicationService 和 ApplicationBar。
·
·
· · Launching="Application_Launching" Closing="Application_Closing"
· Activated="Application_Activated" Deactivated="Application_Deactivated"/>
·


在上面的代码中,定义了程序级别的全局事件,Windows Phone 7只是支持一个活动的应用程序,因此其他程序被激活的时候,当前程序就会被送到后台,Application_Deactivated函数可以处理程序失去激活状态。而程序再次激活的时候,会调用Application_Activated函数。
而Microsoft.Phone.Controls包含了Windows Phone应用程序的框架,例如PhoneApplicationFrame,PhoneApplicationPage和WebBrowser等等。

XMAL解释器
上面讲述到命名空间是为了解决XMAL解释器名字冲突的问题,下面简单看看XMAL解释器生成的中间文件。

在Silverlight程序的编译过程中XAML解释器在obj文件夹会生成一些中间文件,如下图的App.g.cs和MainPage.g.cs文件。


在Visual Studio的Solution视图点击Show All Files按钮也能看到


点击Show All Files以后就能看到App.g.cs等中间文件。


在开发过程中很多其他问题解决不了,很可能需要查看这些*.g.cs的中间文件来解决。

MainPage.xaml讲解
与App.xaml比,MainPage.xaml多了以下的命名空间。
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
http://schemas.microsoft.com/expression/blend/2008 包含XAML设计时(design-time)的特性。例如上述例子设置设计时的长度和宽度。
http://schemas.openxmlformats.org/markup-compatibility/2006表示XAML的兼容性,使得XAML解释器知道那些元素需要处理,那些元素需要忽略,例如上述例子忽略前缀为d的元素。

MainPage.xaml默认生成的文件使用Grid来布局

















在Silverlight for Windows Phone,主要有三大UI布局容器,Canvas,Grid和StackPanel,,这里简单讲述他们的区别,Canvas是绝对定位,Grid是网格定位,而StackPanel是按照子控件的顺序相对定位。这与Silverlight开发是一样的,在学习开发Windows Phone应用程序,建议先学习Silverlight编程基础。
Grid.RowDefinitions用于定义行的信息,其中Height(高度)可以制定具体值,Auto表示根据子元素的高度来决定行的高度,*表示除了其他行以外剩下所以的空间作为高度。
TitlePanel有一个属性Grid.Row=”0”表示这个控件在父Grid的第零行(和C一样从零开始),Grid.Row叫做Attached Properties(附带属性)。叫做Attached Properties可以在子元素里面指定父元素的属性,例如TitlePanel可以制定自己位于父Grid的第零行。做过HTML的人都知道,HTML的table需要td和tr来布局,拥有了Attached Properties布局简化了很多很多。
在这个例子中,我把标题改成“银光收音机”




在设计视图就能看到修改后的布局,如下图。



编译
由于Silverlight for Windows Phone使用Visual Studio 2010作为IDE,Windows Phone的编译过程与其他项目,例如ASP.NET,Winform等基本一模一样。右键项目文件,点击“Build”菜单可以编译项目,或者按F6快捷键也可以编译项目,我个人习惯使用Ctrl+Shift+B一起编译整个解决方案(Solution)。编译的时候,如果想查看错误信息可以查看“Error List” Tab,点击View->Other Windows->Error List菜单可以打开“Error List” Tab。为了演示,我特意做了一个错误。


可是我发现Visual Studio Express for Windows Phone不支持看“Output” Tab。
模拟器
在上篇文章讲述过打开模拟器的方法,请参考上篇文章。
Windows Phone与Windows Mobile很大的区别是Windows Phone严格规定了硬件的规格,手机生产商必须严格按照微软的规范来生产Windows Phone,这样有个好处是程序的通用性,一个程序可以同时支持不同厂商的手机设备,不像Windows Mobile那样,开发的时候还有考虑分辨率,重力加速器(Accelerometer),按钮布局,光电鼠标等等差异性。由于标准化了硬件的规格,Windows Phone的程序如果在模拟器能正常运行,那么应该能在所有Windows Phone设备上运行。下面是Windows Phone的模拟器。


小提示:模拟器第一次启动时候会比较慢,所以调试程序完毕请不好关闭模拟器,下次调试直接部署程序就可以了。
近来有些人反映Windows Phone的模拟器启动速度特别慢,其实这个模拟器是可以通过修改硬件虚拟化协助(Hardware-assisted virtualization)设置来加速Windows Phone模拟器,有兴趣可以参考Optimizing Performance for Windows Phone Emulator.
与模拟器一样,每台Windows Phone设备都会有三个按钮,回退按钮点击的时候会回退到上一层页面或者前一个应用,Start按钮回到主页面,搜索按钮进入搜索。需要注意的是,由于Windows Phone只是允许一个活动的应用程序,因此用户点击Start按钮或者回退按钮的时候可能把退出当前应用,开发的时候可以通过Application_Deactivated和Application_Activated 函数来处理程序失去活动状态和激活的事件。

调试
Windows Phone程序的调试过程与其他使用Visual Stadio开发的程序一样,如果使用Visual Stadio做过ASP.NET或者Winform开发的话,基本不需要学习就能掌握Windows Phone程序的调试过程。下面简单描述一下Windows Phone程序的调试过程。
点击F9或者直接用鼠标在Visual Stadio增加断点。
选择Windows Phone Emulator,点击 “” 按钮启动调试。或者点击F5启动调试。



如果程序逻辑运行到该断点如果,那么程序会自动停留在断点上。


点击Shift+F5停止调试。再次提醒不需要关闭Windows Phone模拟器,下次调试不需要重新启动Windows Phone模拟器,节省时间。 原文链接:http://mehuping.blog.163.com/blog/static/1366666442010101293613753/