解析開發(fā)中Windows Phone 7 CTP-April向Beta版的遷移
本文和大家重點學(xué)習(xí)一下Windows Phone開發(fā)中WindowsPhone7CTP-April向Beta版遷移方面的內(nèi)容,Windowsphone7從發(fā)布到現(xiàn)在一共出了三個版本的SDK,并且互不兼容。
Windows Phone開發(fā)中WindowsPhone7CTP-April向Beta版遷移
Windowsphone7從發(fā)布到現(xiàn)在一共出了三個版本的SDK,并且互不兼容。之前我寫了第一版向第二版的遷移,現(xiàn)在來看一下第二版到Beta版的變化。
一.App.xaml和App.cs
1.App.xaml
Windows Phone開發(fā)中這個文件看上去比原來清爽了很多,沒有大段大段的代碼,這也看來也和新的模擬器風(fēng)格有關(guān)。但是這樣就會出問題了,原來的一個屬性項沒有了,造成原來的頁面加載錯誤。
a.把PhoneTextPageTitle2Style改為PhoneTextNormalStyle或自已再增加一個這樣的屬性。
b
- .<Application.RootVisual>
- <phoneNavigation:PhoneApplicationFramex:NamephoneNavigation:PhoneApplicationFramex:Name="RootFrame"Source="/MainPage.xaml"/>
- </Application.RootVisual>
這一項被取消。從而造成無法啟動應(yīng)用程序。這個設(shè)置程序RootFrame的項被放到了配置文件里。
2.App.xaml.cs
同樣的這個文件也發(fā)生了改變。改動也是比較大的。需要增加和去除一些代碼(這里的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開發(fā)中工程文件
增加了一個宏:WINDOWS_PHONE
<DefineConstants>DEBUG;TRACE;SILVERLIGHT;WINDOWS_PHONE</DefineConstants>
四.Windows Phone開發(fā)中API
很多API被去掉,改名或并且,有相關(guān)的文檔可以查。最主要的是這個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
這個也發(fā)生了改變,去掉了x:Name項,增加了Text屬性,這個屬性必須加,否則運(yùn)行時會報錯。
六.其它:
這個Beta,變動比較大,所有API的改變都在它的文檔里有說明。這里就不在贅述了。還有就是模擬器的變化,可以看到內(nèi)嵌了Bing搜索,還帶語音搜索功能。另外這個版本已經(jīng)支持中文了!