本文和大家重点学习一下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>
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
这一项被取消。从而造成无法启动应用程序。这个设置程序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
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.
- 66.
- 67.
- 68.
- 69.
- 70.
- 71.
- 72.
- 73.
- 74.
- 75.
- 76.
- 77.
- 78.
- 79.
- 80.
- 81.
- 82.
- 83.
- 84.
- 85.
- 86.
- 87.
- 88.
- 89.
- 90.
- 91.
- 92.
- 93.
- 94.
- 95.
- 96.
- 97.
- 98.
- 99.
- 100.
- 101.
- 102.
二.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>
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
2.修改项
原来的:
<Tasks>
<DefaultTaskNameDefaultTaskName="_default"PlaceHolderString="Defaulttask"/>
</Tasks>
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
修改后:
<Tasks>
<DefaultTaskNameDefaultTaskName="_default"NavigationPage="MainPage.xaml"/>
</Tasks>
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
三.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
- 1.
- 2.
- 3.
五.ApplicationBar
这个也发生了改变,去掉了x:Name项,增加了Text属性,这个属性必须加,否则运行时会报错。
六.其它:
这个Beta,变动比较大,所有API的改变都在它的文档里有说明。这里就不在赘述了。还有就是模拟器的变化,可以看到内嵌了Bing搜索,还带语音搜索功能。另外这个版本已经支持中文了!