现在的位置: 首页 > 综合 > 正文

WP开发常见问题

2013年12月13日 ⁄ 综合 ⁄ 共 7614字 ⁄ 字号 评论关闭

1. 开发Windows Phone应用程序需要安装哪些组件?

2. Windows Phone开发的学习资源有哪些?

3. 我要去哪里提出对Windows Phone开发平台的建议?

4. Windows Phone主要有哪些通信方式?

5. Windows Phone访问REST service支持哪些验证方式?

6. 我能否启动一个后台进程?

7. 怎样在Windows Phone不同页面间传值?

8. Windows Phone提供了哪些类型的推送通知服务?

9. 我能否开发一个系统组件?

10. 如何在Windows Phone模拟器中模拟多点触摸?

11. 在程序运行时怎样防止WP7自动锁屏?

12. 如何设置手机的横竖显示方向?

13. 如何隐藏System Tray

14. OnNavigatedToOnNavigatedFrom的区别是什么?

15. 如何动态修改 shell:ApplicationBarIconButton显示图片?

16. 如何使应用在手机锁定状态仍可以运行和震动?

17. 如何使手机震动如何使在震动的手机停止震动?

18. 如何使用WP7的收音机?

19. 如何使用CameraCaptureTask进行图像获取?

20. XNA中如何弹出带有按钮处理事件的消息?

21. 手势有哪些基本操作(XNA)?

22. XNA支持哪些手势?

23. 出现Invalid attribute value controls:LongListSelector for property TargetType这个错误的可能原因是什么?

Answers

1. 开发Windows Phone应用程序需要安装哪些组件?

您只要安装Windows Phone SDK 7.1就已经包含最基本的windows phone开发所需工具:

· Microsoft Visual Studio 2010 Express for Windows Phone

· Windows Phone Emulator

· Windows Phone SDK 7.1 Assemblies

· Silverlight 4 SDK and DRT

· Windows Phone SDK 7.1 Extensions for XNA Game Studio 4.0

· Microsoft Expression Blend SDK for Windows Phone 7

· Microsoft Expression Blend SDK for Windows Phone OS 7.1

· WCF Data Services Client for Window Phone

· Microsoft Advertising SDK for Windows Phone

可以选择性安装 Silverlight for Windows Phone Toolkit,其中提供了很多可直接使用的windows phone控件。

如果想要方便程序界面设计,推荐安装Expression Blend 4


2. Windows Phone开发的学习资源有哪些?

· 我们推荐你从portal开始:

http://www.wpdever.com/portal.php?mod=list&catid=4

http://msdn.microsoft.com/zh-cn/ff380145

http://create.msdn.com/en-US/

· 免费在线培训课程

WP7: http://msdn.microsoft.com/en-us/wp7trainingcourse.aspx

Mango: http://msdn.microsoft.com/en-US/WP7MangoTrainingCourse

视频教程:http://www.wpdever.com/portal.php?mod=list&catid=6

· MSDN文档

http://msdn.microsoft.com/zh-cn/library/ff402535.aspx

· 开源代码实例


http://www.wpdever.com/portal.php?mod=list&catid=11
http://msdn.microsoft.com/zh-cn/library/ff431744.aspx

· Programming Windows Phone 7免费电子书
http://www.wpdever.com/portal.php?mod=list&catid=7
http://blogs.msdn.com/b/microsoft_press/archive/2010/10/28/free-ebook-programming-windows-phone-7-by-charles-petzold.aspx

3. 我要去哪里提出对Windows Phone开发平台的建议?

如果您需要的一个功能在目前版本的Windows Phone不支持,可以去WPDev 反馈网站提交您的建议和意见。同时您也可以对已提交的建议进行投票,如果有足够多的人要求添加该功能,在未来的某个Windows Phone版本中就很可能实现了。

4. Windows Phone主要有哪些通信方式?

Windows Phone支持传统的电话,短信,以及Email通信,但是你的程序无法直接控制电话短信,只能够通过PhoneCallTaskSmsComposeTask,以及EmailComposeTask间接通信。你可以使用这些task自动填充短信以及邮件内容,但无法强制用户发送短信和邮件,只有用户确认了才能发送。

Windows Phone也支持部分PC上的通信方式。

· HTTP

可以使用WebClient或者HttpWebRequest访问REST service

· SOAP 1.1

可以访问支持SOAP 1.1SOAP service,例如使用BasicHttpBindingWCF service。请注意大多数手机,例如iPhoneAndroid,都不支持SOAP(虽然有第三方类库),所以我们推荐尽量使用REST

· REST

与服务器通信我们推荐使用REST service,而不是短信和邮件,因为REST service最通用,你可以在非手机设备上(例如今后会出现支持Windows 8的平板电脑)使用同样的service。你的service可以部署在任何服务器上,只需要该服务器能在internet上访问。例如,你可以将服务部署在Windows Azure云端。

· Socket

WP7.1提供了部分socket的支持,有关详细信息请参考Windows Phone Socket 

Socket适合于对性能要求高的场合,因为TCP相比较HTTP快一些。

5. Windows Phone访问REST service支持哪些验证方式?

Windows Phone支持Basic AuthenticationOAuth两种验证方式。

· Basic Authentication

在简单的场合下,你可以使用basic authentication。请注意使用SSL加密通信。使用Basic Authentication的方式和普通的Silverlight程序是一样的,请参考

Windows Phone 7: Basic Authentication over HTTPS

· OAuth

使用OAuth可以使你的服务被第三方客户端访问,例如Windows Live ConnectWindows Azure ACSFacebookGoogle API,都支持OAuth。使用OAuth的方法,请参考

OAuth2 and OData Service in a Windows Phone 7 app 

6. 我能否启动一个后台进程?

Windows Phone强调用户体验,强调电池使用效率,因此不支持后台进程。但是考虑到很多程序确实需要在后台做一些事,在WP7.1中提供了后台代理的功能。

使用后台代理,你可以要求系统在你的程序不处于运行状态时执行某些任务,但是系统不保证任务的优先级,若是多个程序都申请要执行后台任务,有可能你的任务必须等到其它程序申请的某个任务完成后才能执行。

7. 怎样在Windows Phone不同页面间传值?

Windows Phone页面间传值主要有三种方式:

· Query String

例如URL定为/SecondPage.xaml?id=1,然后在SecondPage中通过NavigationContext.QueryString[id]取得对应的值。如果有多个属性,也可以通过&符号连接多个属性。如:/SecondPage.xaml?Name=MyName&Amount=100。注意所有的query string必须是string,如果是int之类的数值必须作类型转换,不能使用复杂类型。

· 全局变量

一个常见的做法是在App中定义一个属性,例如MyVariable。然后你可以通过(Application.Current as App).MyVariable的方式访问那个属性,读写均可。

· 在当前页面中定义一个属性,在SecondPage中重写OnNavigatedFrom,然后判断e.Content的类型是不是之前的那个页面,如果是,就做个类型转换,并访问对应的属性。例如假设从FirstPage转到SecondPage,可以在SecondPageOnNavigatedFrom中写

if (e.Content is FirstPage)

{

var v = (e.Content as FirstPage).SomeProperty;

}



至于从page B返回参数给page A,和从page A传参数到page B是一样的,就是把A当成second page,把B当成first page即可。也可以使用query string,全局变量,或者在B中定义一个属性。

8. Windows Phone提供了哪些类型的推送通知服务?

大体上分为三种 推送通知的方式,RawToastTile



· Raw

推送一个二进制数据(在.NET平台上就是byte array)至手机。你的手机应用程序得到数据后,可以在应用程序内部进行处理并显示,但是不会涉及到任何tiletoast



· Tile

a. Single tile:这是tile的一种,指的是单纯地操作应用程序的main tileService push一条消息至手机,这条消息可以包括一幅画,一句话,还有一个数。手机收到该消息后,如果用户有选择将对应的应用程序pin到主页上,就会更新应用程序的main tile

b. Multi tile:和single tile不同,它用于更新应用程序的secondary tile。你的程序可以提供一个功能,在主页上添加上不止一个tile。每个tile对应程序的一个页面。多个tile也可以对应同样的页面,使用query string区别表示。现在,service push消息时,会多包含一个URI信息,也就是对应的页面及查询字符串。当手机接收到该消息时,会比对每个secondary tileURI,如果对应的页面和查询字符串都匹配,就会更新tile



· Toast

推送两句话至手机,分别代表主标题和副标题。手机收到消息后,会显示在屏幕上方,过一段时间自动消失。即使你的程序不在运行这两句话也会显示。如果用户触碰了那条消息,你的应用程序就会打开。



一种特殊的toastDeep Toast,只是包含了一个URI和查询字符串。当用户触碰消息时,你的程序可以根据URI和查询字符串判断要打开哪个页面。



了解更多推送服务,请查看以下详细文档:

http://msdn.microsoft.com/en-us/WP7MangoTrainingCourse_PushNotificationsMangoLab

http://msdn.microsoft.com/zh-cn/library/ff402537(v=VS.92).aspx

9. 我能否开发一个系统组件?

目前Windows Phone不支持自行开发系统组件。只有微软和诸如诺基亚之类的OEM才有权限开发系统组件。但是你可以开发一个类库,并且被其它程序调用。这个类库可以包含普通的类,UserControl,以及自定义控件。其开发过程和普通的Silverlight类库是一样的。

如何在Silverlight中开发自定义控件,请参考

http://www.silverlightshow.net/items/Creating-a-Silverlight-Custom-Control-The-Basics.aspx

开发Windows Phone自定义控件

http://www.windowsphonegeek.com/articles/Creating-a-WP7-Custom-Control-in-7-Steps


10. 如何在Windows Phone模拟器中模拟多点触摸?


如果有支持多点触摸的显示器,则可以直接利用显示器进行多点触摸的测试。但如果没有支持多点触摸的显示器,我们可以通过安装Multi Touch Vista然后用两个鼠标来模拟多点触摸。 但是目前只在windows 7系统上支持。以下链接中介绍了详细的操作流程。

http://michaelsync.net/2010/04/06/step-by-step-tutorial-installing-multi-touch-simulator-for-silverlight-phone-7

11. 在程序运行时怎样防止WP7自动锁屏?

可以借助Guide.ScreenSaveEnabled 属性来防止系统检测手机空闲的状态。

UserIdleDetectionMode属性

Windows Phone 空闲检测

12. 如何设置手机的横竖显示方向?

在头部的内有属性SupportedOrientationsOrientation。 SupportedOrientations为支持的显示方向。Orientation为当前的显示方向。他们的值都有三种选择:

· Portrait:纵向。

· Landscape:横向。

· PortraitOrLandscape:纵向或横向。

13. 如何隐藏System Tray

在头部的内添加属性shell:SystemTray.IsVisible="False"即可隐藏System Tray

14. OnNavigatedToOnNavigatedFrom的区别是什么?

OnNavigatedTo是从其他页面跳转到当前页面时触发的事件, OnNavigatedFrom是从当前页面跳转到其他页面时触发的事件,简单的理解 OnNavigatedToThisPage和 OnNavigatedFromThisPage


15. 如何动态修改 shell:ApplicationBarIconButton显示图片?

IApplicationBarIconButton iconButton = this.ApplicationBar.Buttons[0] as IApplicationBarIconButton;
iconButton.IconUri = new Uri(Images/icon.png, UriKind.Relative);

16. 如何使应用在手机锁定状态仍可以运行和震动?

设置PhoneApplicationService.Current.ApplicationIdleDetectionMode = IdleDetectionMode. Enabled;

但是,这个设置是单向的,当设置为Disabled,就不能再设置为Default.

17. 如何使手机震动如何使在震动的手机停止震动?

使手机震动:VibrateController.Default.Start(TimeSpan.FromSeconds(.5));

使在震动的手机停止震动: VibrateController.Default.Stop();

18. 如何使用WP7的收音机?

· FMRadio.Instance.SignalStrength:获取信号强度.

· FMRadio.Instance.Frequency:获取当前的频率.

· FMRadio.Instance.PowerMode = RadioPowerMode.On;打开收音机.

· FMRadio.Instance.PowerMode = RadioPowerMode.Off;关闭收音机.

19. 如何使用CameraCaptureTask进行图像获取?

请参见以下代码

private void button1_Click(object sender, RoutedEventArgs e)
{
CameraCaptureTask camera = new CameraCaptureTask();
camera.Completed += OnCameraCaptureTaskCompleted;
camera.Show();
}

void OnCameraCaptureTaskCompleted(object sender, PhotoResult args)
{
if (args.TaskResult == TaskResult.OK)
{
BitmapImage bmp = new BitmapImage();
bmp.SetSource(args.ChosenPhoto);
img.Source = bmp;
}
}


20. XNA中如何弹出带有按钮处理事件的消息?

1. 添加Microsoft.Xna.Framework.GamerServices的引用

应用以下代码:

Guide.BeginShowMessageBox("标题","我是消息,我被弹出来了!",new string[] { "", "" }, 0, MessageBoxIcon.None, new AsyncCallback(OnMessageBoxClosed), null);

void OnMessageBoxClosed(IAsyncResult result)
{
int? buttonIndex = Guide.EndShowMessageBox(result);

抱歉!评论已关闭.