本文和大家重点学习一下Windows Phone开发中WindowsPhone7CTP-April向Beta版迁移方面的内容,Windowsphone7从发布到现在一共出了三个版本的SDK,并且互不兼容。
Windows Phone开发中WindowsPhone7CTP-April向Beta版迁移
Windowsphone7从发布到现在一共出了三个版本的SDK,并且互不兼容。之前我写了第一版向第二版的迁移,现在来看一下第二版到Beta版的变化。
一.App.xaml和App.cs
1.App.xaml
Windows Phone开发中这个文件看上去比原来清爽了很多,没有大段大段的代码,这也看来也和新的模拟器风格有关。但是这样就会出问题了,原来的一个属性项没有了,造成原来的页面加载错误。
a.把PhoneTextPageTitle2Style改为PhoneTextNormalStyle或自已再增加一个这样的属性。
b
- .<Application.RootVisual>
- <phoneNavigation:PhoneApplicationFramex:NamephoneNavigation:PhoneApplicationFramex:Name="RootFrame"Source="/MainPage.xaml"/>
- </Application.RootVisual>
这一项被取消。从而造成无法启动应用程序。这个设置程序RootFrame的项被放到了配置文件里。
2.App.xaml.cs
同样的这个文件也发生了改变。改动也是比较大的。需要增加和去除一些代码(这里的Appp类的代码):
- publicpartialclassApp:Application
- {
- publicPhoneApplicationFrameRootFrame{get;privateset;}
- //Constructor
- publicApp()
- {
- //Globalhandlerforuncaughtexceptions.
- //NotethatexceptionsthrownbyApplicationBarItem.Clickwillnotgetcaughthere.
- UnhandledException+=Application_UnhandledException;
- //StandardSilverlightinitialization
- InitializeComponent();
- //Phone-specificinitialization
- InitializePhoneApplication();
- }
- //Codetoexecutewhentheapplicationislaunching(eg,fromStart)
- //Thiscodewillnotexecutewhentheapplicationisreactivated
- privatevoidApplication_Launching(objectsender,LaunchingEventArgse)
- {
- }
- //Codetoexecutewhentheapplicationisactivated(broughttoforeground)
- //Thiscodewillnotexecutewhentheapplicationisfirstlaunched
- privatevoidApplication_Activated(objectsender,ActivatedEventArgse)
- {
- }
- //Codetoexecutewhentheapplicationisdeactivated(senttobackground)
- //Thiscodewillnotexecutewhentheapplicationisclosing
- privatevoidApplication_Deactivated(objectsender,DeactivatedEventArgse)
- {
- }
- //Codetoexecutewhentheapplicationisclosing(eg,userhitBack)
- //Thiscodewillnotexecutewhentheapplicationisdeactivated
- privatevoidApplication_Closing(objectsender,ClosingEventArgse)
- {
- }
- //Codetoexecuteifanavigationfails
- voidRootFrame_NavigationFailed(objectsender,NavigationFailedEventArgse)
- {
- if(System.Diagnostics.Debugger.IsAttached)
- {
- //Anavigationhasfailed;breakintothedebugger
- System.Diagnostics.Debugger.Break();
- }
- }
- //CodetoexecuteonUnhandledExceptions
- privatevoidApplication_UnhandledException(objectsender,ApplicationUnhandledExceptionEventArgse)
- {
- if(System.Diagnostics.Debugger.IsAttached)
- {
- //Anunhandledexceptionhasoccurred;breakintothedebugger
- System.Diagnostics.Debugger.Break();
- }
- }
- #regionPhoneapplicationinitialization
- //Avoiddouble-initialization
- privateboolphoneApplicationInitialized=false;
- //Donotaddanyadditionalcodetothismethod
- privatevoidInitializePhoneApplication()
- {
- if(phoneApplicationInitialized)
- return;
- //Createtheframebutdon'tsetitasRootVisualyet;thisallowsthesplash
- //screentoremainactiveuntiltheapplicationisreadytorender.
- RootFrame=newPhoneApplicationFrame();
- RootFrame.Navigated+=CompleteInitializePhoneApplication;
- //Handlenavigationfailures
- RootFrame.NavigationFailed+=RootFrame_NavigationFailed;
- //Ensurewedon'tinitializeagain
- phoneApplicationInitialized=true;
- }
- //Donotaddanyadditionalcodetothismethod
- privatevoidCompleteInitializePhoneApplication(objectsender,NavigationEventArgse)
- {
- //Settherootvisualtoallowtheapplicationtorender
- if(RootVisual!=RootFrame)
- RootVisual=RootFrame;
- //Removethishandlersinceitisnolongerneeded
- RootFrame.Navigated-=CompleteInitializePhoneApplication;
- }
- #endregion
- }
二.WMAppManifest.xml
这个文件也有一些小改动。但是这些改动会造成程序无法启动。
1.增加项
- <Capabilities>
- <CapabilityNameCapabilityName="ID_CAP_NETWORKING"/>
- <CapabilityNameCapabilityName="ID_CAP_LOCATION"/>
- <CapabilityNameCapabilityName="ID_CAP_SENSORS"/>
- <CapabilityNameCapabilityName="ID_CAP_MICROPHONE"/>
- <CapabilityNameCapabilityName="ID_CAP_MEDIALIB"/>
- <CapabilityNameCapabilityName="ID_CAP_GAMERSERVICES"/>
- <CapabilityNameCapabilityName="ID_CAP_PHONEDIALER"/>
- <CapabilityNameCapabilityName="ID_CAP_PUSH_NOTIFICATION"/>
- <CapabilityNameCapabilityName="ID_CAP_WEBBROWSERCOMPONENT"/>
- </Capabilities>
2.修改项
原来的:
- <Tasks>
- <DefaultTaskNameDefaultTaskName="_default"PlaceHolderString="Defaulttask"/>
- </Tasks>
修改后:
- <Tasks>
- <DefaultTaskNameDefaultTaskName="_default"NavigationPage="MainPage.xaml"/>
- </Tasks>
三.Windows Phone开发中工程文件
增加了一个宏:WINDOWS_PHONE
<DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
四.Windows Phone开发中API
很多API被去掉,改名或并且,有相关的文档可以查。最主要的是这个Microsoft.Phone.dll的改动也会造成无法编译或无法启动程序。原来的Microsoft.Phone.Navigatio.dll被改为了System.Windows.Navigation.dll;
修改这两项:
- xmlns:navigation="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
- xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone
五.ApplicationBar
这个也发生了改变,去掉了x:Name项,增加了Text属性,这个属性必须加,否则运行时会报错。
六.其它:
这个Beta,变动比较大,所有API的改变都在它的文档里有说明。这里就不在赘述了。还有就是模拟器的变化,可以看到内嵌了Bing搜索,还带语音搜索功能。另外这个版本已经支持中文了!