第四天session從win8移植到wp8labcn porting to_第1頁(yè)
第四天session從win8移植到wp8labcn porting to_第2頁(yè)
第四天session從win8移植到wp8labcn porting to_第3頁(yè)
第四天session從win8移植到wp8labcn porting to_第4頁(yè)
第四天session從win8移植到wp8labcn porting to_第5頁(yè)
已閱讀5頁(yè),還剩53頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Windows8WindowsPhone8Lab Last 概 練習(xí)1:遷移CONTOSOCOOKBOOK 任務(wù)1—?jiǎng)?chuàng)建一個(gè)新的項(xiàng)目并導(dǎo)入Common和Asset文 任務(wù)2—移植主頁(yè) 任務(wù)3—移植分組詳細(xì)信息 練習(xí)2:遷移CONTOSOCOOKBOOK業(yè)務(wù)邏 任務(wù)1—確定可重用的業(yè)務(wù)邏 任務(wù)2—遷移數(shù)據(jù)加載方 練習(xí)3:特有功 任務(wù)1—實(shí)現(xiàn)WindowsPhone8圖像共 任務(wù)2—開(kāi)發(fā)二級(jí)磁貼訂的功 任務(wù)3—開(kāi)發(fā)WindowsPhone8中的提醒功 總 概新的WindowsPhone8操作系統(tǒng)給應(yīng)用開(kāi)發(fā)者提供了一些全新的和更新的功能,包括C++的本地游戲開(kāi)發(fā),定制版的WindowsRuntime(WinRT),并與Windows8共個(gè)新內(nèi)核。WindowsPhone8并不需完整WindowsRuntime功能,因?yàn)閃indowsRuntime針對(duì)的是臺(tái)式機(jī)和平板設(shè)備。Windows8Runtime包含很多與WindowsPhone無(wú)關(guān)的功能,這些功能也不會(huì)在其它版本的WindowsPhone上工作。并且,WindowsPhone8提供了和相關(guān)的獨(dú)特功能,這些在.Phone這個(gè)命名空間內(nèi)(延續(xù)于先前的WindowsPhone版本)。這個(gè)命名空間以及它的功能是只是WindowsPhone8才會(huì)相關(guān)有用,并不是所有的Windows8設(shè)備。這個(gè)實(shí)驗(yàn)會(huì)告訴你如何將WindowsStore(Windows8)應(yīng)用轉(zhuǎn)變成WindowsPhone8當(dāng)移植一個(gè)WindowsStore應(yīng)用到上時(shí),你會(huì)很有可能遇到編譯錯(cuò)誤,因?yàn)閃indows8API不能在WindowsPhone上的WindowsRuntime上運(yùn)行。以下是需要被解決的問(wèn)題:Phone應(yīng)用必須使用WindowsPhoneAPI,或者在上去模仿Windows8上的功能。例如,和WindowsPhone8相比,Windows8CharmsAPI有不同的API集和設(shè)計(jì)方法。你不得不決定WindowsPhoneShareCharm是否和適合代替Windows8共享邊欄。功能丟失。一些Windows8功能并不存在于WindowsPhoneRuntime上。例如,你的WindowsStore應(yīng)用很肯能使用例如GridView這種控件,而這種控件不存在于WindowsPhone里。在這樣的情況,你需要使用一種不同的內(nèi)容控件來(lái)展示你的數(shù)據(jù)。方向。默認(rèn)的WindowsStore應(yīng)用是橫向的,而默認(rèn)的WindowsPhone是縱向Windows8使用水平布局,而WindowsPhone使用垂直布XAML。WindowsStore應(yīng)用使用一個(gè)稍微不同于WindowsPhone8的版本。比如,命名屏幕尺寸。WindowsStore10英寸或者更大的,并且最小分辨率是1024x768的屏幕上運(yùn)行。而WindowsPhone5英寸的屏幕上。往往需要一個(gè)不同的視圖布局。另外,WindowsPhone8的設(shè)備選擇比Windows8更為在考慮完這些問(wèn)題后,改寫我們應(yīng)用的xaml頁(yè)面并重用一小部分現(xiàn)有代碼。當(dāng)然也有一些在本次試驗(yàn)中,我們會(huì)使用ContosoCookbook為樣品。這是一個(gè)簡(jiǎn)單的WindowsStore,并且它已經(jīng)在我們的Windows8培訓(xùn)工程包內(nèi)。注意:注意:Windows8[實(shí)驗(yàn)包安裝路徑]/Assets/ContosoCookBook請(qǐng)花一些時(shí)間去打開(kāi)WindowsStore應(yīng)用工程并讓你自己熟悉一下這個(gè)應(yīng)用注意:本實(shí)驗(yàn)不注意:本實(shí)驗(yàn)不供如何移植iwsre應(yīng)用到Wiws8自動(dòng)防出錯(cuò)方案。它提了你很可能遇到的移植題的解決準(zhǔn)。盡管實(shí)驗(yàn)包許多共同的移植題,它也不一個(gè)完整的能出現(xiàn)任何移植題的工程解方案。最后該驗(yàn)沒(méi)有解決游戲多 應(yīng)用它側(cè)重于典型的數(shù)據(jù)表現(xiàn)。目發(fā)現(xiàn)WindowsStore應(yīng)用和WindowsPhone8解釋如何從WindowsStore應(yīng)用遷移到WindowsPhone8解釋W(xué)indowsSotre應(yīng)用中的哪些部分是在WindowsPhone8提供一般性的指導(dǎo)并描述的移植WindowsStore應(yīng)用程序到WindowsPhone8系統(tǒng)需WindowsVisualStudio2012forWindowsVisualStudioExpress2012forWindowsPhone練遷移遷移估計(jì)完成此實(shí)驗(yàn)的時(shí)間45601:ContosoCookbook在開(kāi)始遷移開(kāi)始之前,熟悉一下ContosoCookbookContosoCookbookWindows8應(yīng)用主頁(yè)該包括3頁(yè),管理和顯示食譜。食譜屬于組,由美食類型分組。主要頁(yè)面(見(jiàn)圖2)展示美食食譜組頁(yè)食譜ContosoCookbook的表現(xiàn)層需要重寫大部分XAML。以下是一些在本練習(xí)中的例子LayoutAwarePageWindowsStore)PhoneApplicationPage(WindowsPhone8)。尋找合適的用于替代諸如GridView,FlipView的WindowsStore組件,這些在WindowsPhone中不可用。調(diào)整XAML名空間為WindowsPhone.例如,在WindowsStore應(yīng)用程序中,Grid控件隸屬于Windows.UI.Xaml.Controls,而在WindowsPhone8中它屬于VisualStudioExpress2012forWindowsPhone,在左側(cè)菜單導(dǎo)航中,展開(kāi)模板(Temtes),然后展開(kāi)VisualC#,然后點(diǎn)擊Windows在右側(cè)菜單中,點(diǎn)擊WindowsPhone應(yīng)用。名字ContosoCookbookOK創(chuàng)建一個(gè)新的應(yīng)在版本選擇框中,選擇“WindowsPhoneOS8.0”點(diǎn)擊OK版本選擇會(huì)用這些文件來(lái)作為WindowsPhone應(yīng)用的圖標(biāo)。在解決方案資源管理器跳轉(zhuǎn)到屬性文件夾的應(yīng)用程序中(WMAppManifest.xmlfile)并雙擊它,VisualStudio會(huì)打開(kāi)該的設(shè)計(jì)頁(yè)面。更改顯示名字(DisyName)為ContosoCookbook(見(jiàn)圖7)AppIconApplicationIcon.pngSmallMediumTileImagesBackground.png文件。應(yīng)用程序修創(chuàng)建一個(gè)新的項(xiàng)目文件夾:項(xiàng)目名字,選擇Add并新建文件夾。把這文件夾命創(chuàng)建一個(gè)新文件正如前面提到的,一些WindowsStore的應(yīng)用程序的代碼是“基本兼容”的WindowsPhone。這是一個(gè)很好的例子值轉(zhuǎn)換器(IValueConverter的實(shí)現(xiàn))。這兩個(gè)平臺(tái)之間的差異是命名空間(WindowsStoreSystem.Windows.Data和WindowsPhone的Windows.UI.Xaml.Data)IValueConverter.Convert方法的最后一個(gè)參數(shù)的類型:C#C#(WindowsStorepublicpublicobjectConvert(objectvalue,TypetargetType,objectparameter,stringC#C#(WindowsPhonepublicpublicobjectConvert(objectvalue,TypetargetType,objectparameter,System.Globalization.CultureInfoculture)注意:其他的注意:其他的IValueConverter的方法,ConvertBack mon加入到文件夾中:Common文件夾,點(diǎn)擊Add,然后選擇已有項(xiàng)(ExistingItem):在項(xiàng)目中增加已 mon選擇所有文件,在項(xiàng)目中添加接下來(lái),我們把WindowsStoreassets轉(zhuǎn)移出來(lái)。使用和前面指導(dǎo)相同的步驟來(lái)assets從[實(shí)驗(yàn)安裝文件夾]/Assets/Code/Ex1/AssetsWindowsPhone應(yīng)用中的“Assets”文件夾。當(dāng)這么做時(shí),請(qǐng)保持文件夾下的結(jié)構(gòu)(比如創(chuàng)建一個(gè)子圖標(biāo)文件夾,并增加相應(yīng)的文件等)10相似。加入AddedAssets后的項(xiàng)目結(jié)接下來(lái),我們對(duì)App.xamlassetsApp.xaml<local:LocalizedStringsxmlns:local="clr-namespace:ContosoCookbook"<sys:Stringx:Key="AppName">Contoso<sys:Double yConverter yConverter <ResourceDictionary2xml UI任務(wù)2移植主頁(yè)打開(kāi)WindowsStoreContosoCookbook應(yīng)用的主頁(yè)面(GroupedItemsPage.xaml文件).必須考XAML元素是不同的。WindowsStore應(yīng)用的根元素是LayoutAwarePage頁(yè)面類中的derives),而WindowsPhone則有PhoneApplicationPage作為根元素。WindowsStoreXAML包含Grid2退按鈕,另外一行是頁(yè)面內(nèi)容。下面就是這個(gè)Grid的第一行:XAMLXAML(WindowsStoreapp,<Grid<GridStyle="{StaticResource<RowDefinition<RowDefinition<!--Backbuttonandpagetitle--<ColumnDefinition<ColumnDefinition<Buttonx:Name="backButton"Click="GoBack"IsEnabled="{BindingStyle="{StaticResource<ImageSource="/Images/theme/logo.png"Grid.Column="1"HorizontalAlignment="Left"Margin="0,12,0,10"Width="280"/>當(dāng)新建一個(gè)WindowsPhoneVisualStudio會(huì)自動(dòng)創(chuàng)建MainPage.xaml樣例模<Gridx:Name="ContentPanel"Grid.Row="1"ceadditionalcontenthere--<!--ContentPanel<Gridx:Name="LayoutRoot"<RowDefinition<RowDefinition<!--TitlePanelcontainsthenameoftheapplicationand<StackPanelx:Name="TitlePanel"Grid.Row="0"<TextBlockText="MYAPPLICATION"Style="{StaticResourcePhoneTextNormalStyle}"<TextBlockText="pagename"Margin="9,-7,0,0"Style="{StaticResourcePhoneTextTitle1Style}"/>XAML(WindowsPhoneapp,由一個(gè)兩行的Grid控件的默認(rèn)模板。第一行是應(yīng)用程序的標(biāo)題和頁(yè)面標(biāo)題。第二行包含另一個(gè)Grid控制頁(yè)面的內(nèi)容。比較完WindowsPhone8和WindowsStore應(yīng)用的主頁(yè)面后,我們應(yīng)當(dāng)在Grid頭部做兩處修改,weshouldmaketwochangestothegrid’sheader:方向。WindowsPhoneStackPanel2后退按鈕。都有一個(gè)硬件返回按鈕。這意味著屏幕上的返回按鈕是多余的。在一般情xamlXAMLXAML(Windows<StackPanel<StackPanelx:Name="TitlePanel"Grid.Row="0"<Imagex:Name="imgLogo"Source="Assets/Title.png"<TextBlockx:Name="PageTitle"Text="ContosoRecipes"Foreground="{StaticResourceCustomGroupTitleBrush}"Style="{StaticResourcePhoneTextTitle1Style}"Margin="9,-SemanticZoom(語(yǔ)義縮放)WindowsPhone注釋:注釋:SemanticZoom是一個(gè)優(yōu)化的觸摸技術(shù),使用WindowsStore的應(yīng)用程序在Windows8能在一個(gè)單一的視圖(如相冊(cè),應(yīng)用程序列表,或地址簿)中瀏覽 信息,請(qǐng)參閱Windows8的文檔: /en-WindowsStore應(yīng)用的內(nèi)容選擇是通過(guò)一系列SemanticZoomXAML.它定義了兩組視圖,分別是“ZoomedIn”“ZoomedOut”狀態(tài)。WindowsPhone不支持SemanticZoom“ZoomedIn”狀態(tài)作為我們WindowsPhone應(yīng)用代碼。以下是WindowsStore“ZoomedIn”狀態(tài)的對(duì)應(yīng)代碼:XAML(WindowsStore<GridViewAutomationProperties.Name="GroupedItems"ItemsSource="{BindingSource={StaticResource te="{StaticResourceStandard250x250ItemTem <VirtualizingStackPanel <GridAutomationProperties.Name="GroupTitle"

Style="{StaticResource XAML代碼是一段WindowsStore應(yīng)用中的標(biāo)準(zhǔn)GridView代碼,需要作以下修默認(rèn)情況下,把ItemsPanelVirtualizingStackPanel增加一個(gè)帶HeaderTemte的GroupStyle和一個(gè)ItemsPanelTemteGridView控件更適合水平布局的瀏覽,用一個(gè)ListBox控件取代它,使得更適合垂直布局。另外,我們改編了ListBoxItemsPanelVirtualizingStackPanel因?yàn)樗苁紫?,?chuàng)建一個(gè)新的模版,來(lái)展現(xiàn)食譜組。在ContentPanelGrid<ListBoxx:Name="lstGroups"ItemsSource="{Binding}"<ListBoxx:Name="lstGroups"ItemsSource="{Binding}"<!--ThisisthesameItemsPanel teasintheWin8app-- <VirtualizingStackPanel <!--ANew tesuitableforthesmallersimilartothe tethatwehadforcontrolintheWin8app-- <GridMargin="5"<ColumnDefinition<ColumnDefinition<ColumnDefinitionXAML(Windows<ImageSource="{BindingGrid.RowSpan="2"<TextBlockText="{BindingGrid.Column="1"Grid.Row="0"<ImageSource="/Assets/lock.png"Visibility="{BindingLicensedRequired,Converter={StaticResourceVisibilityConverter}}"Grid.Column="2"Grid.Row="0"HorizontalAlignment="Right"/><TextBlockText="{BindingDescription}"FontSize="24"Grid.Column="1"Grid.Row="1"Foreground="{StaticResource 其次,需要在WindowsPhone頁(yè)面根元素上做一些小的改動(dòng)。修改SystemTray.IsVisibleFalse默認(rèn)為ss現(xiàn)在,改編LayoutRootGrid“LayoutRootGrid元素,修改Background="{StaticResourceBackground="{StaticResource最后,我們需要實(shí)現(xiàn)ListBox的SelectionChanged的觸發(fā)。打開(kāi)MainPage.xaml.cs文MainPageclass中加入以下代碼:privateprivatevoidlstGroups_SelectionChanged(object{}注意:GroupedItemsPage.xamlSnappedview(帖靠視圖)同樣在WindowsPhone中不支持,我們需要注釋掉這些代碼。任務(wù)3—移注意:GroupedItemsPage.xamlSnappedview(帖靠視圖)同樣在WindowsPhone中不支持,我們需要注釋掉這些代碼。在移植過(guò)程中的GroupDetailPage.xaml頁(yè)面將包含我們還沒(méi)有遇到的的問(wèn)題。本組的詳細(xì)信息頁(yè)分組詳細(xì)信息為了移植這個(gè)頁(yè)面到WindowsPhone上,我們需要一個(gè)與相關(guān)的方法去顯示分欄的視圖(第一排:組信息,第二排:食譜信息)。因?yàn)槭强v向的,我們使用Pivot控件。Pivot控件頁(yè)面可第一個(gè)Pivot頁(yè)面顯示組信息,另一個(gè)Pivot頁(yè)面顯示食譜信息。給應(yīng)用添加一個(gè)新的頁(yè)面。在VisualStudio解決方案瀏覽器中,項(xiàng)目名稱,點(diǎn)擊為項(xiàng)目新增在打開(kāi)的框中,選擇WindowsPhone縱向頁(yè)面,命名為GroupDetailPage.xaml,然后點(diǎn)增加一個(gè)新的WindowsPhone縱向頁(yè)我們現(xiàn)在修改默認(rèn)的PivotPageXML元素中增xmlns:controls="clr-xmlns:controls="clr- LayoutRoot的Grid,修改它的BackgroundBackground="{StaticResource 接著,用PivotLayoutRootGrid<!--Pivot<!--PivotControl--<controls:Pivot<Imagex:Name="imgLogo"Width="{StaticResourceLogoImageWidth}"/>這里的代碼同樣使用了應(yīng)用圖標(biāo)作為PivotPivotItemPivot.Title完成后,代碼中將以下代碼加Pivot元素中:<!--Pivot<!--Pivotitemone--<TextBlockText="{BindingTitle}"Foreground="{StaticResourceCustomGroupTitleBrush}"/><RowDefinition<RowDefinition<Image<ImageSource="{BindingBackgroundImage}"<RectangleFill="{StaticResourceWidth="{BindingElementName=img,Path=ActualWidth}"Height="75"VerticalAlignment="Bottom"/><StackPanelOrientation="Horizontal"Margin="5"<TextBlockText="TotalRecipes:Foreground="{StaticResourceCustomListViewItemOverlayTextBrush}"FontSize="48"/><TextBlockText="{BindingForeground="{StaticResourceCustomListViewItemOverlayTextBrush}"FontSize="48"/><ScrollViewer<TextBlockText="{Binding PivotItemPivotItemListBox。把它們添加在PivotItem后:<!--Pivot<!--Pivotitemtwo--<StackPanel<TextBlockText="Recipes"<ListBoxx:Name="lstRecipes"ItemsSource="{BindingItems}" <Grid<ImageGrid.RowSpan="2"/><TextBlockText="{BindingGrid.Column="1"Grid.Row="0"<StackPanel<TextBlocktime:<TextBlock 最后,在代碼中添加相關(guān)的。打開(kāi)GroupDetailPage.xaml.cs文件并添加以下代privateprivatevoidlstRecipes_SelectionChanged(object{} 任務(wù)4—移植食譜詳細(xì)在WindowsStoreFlipViewGrid控件。FlipView控件食譜詳細(xì)WindowsPhoneFlipView控件,這意味著這些功能必須被替換。我們用Pivot控件來(lái)代替原來(lái)的多列表格。原始頁(yè)面是3列g(shù)rid。我們用3個(gè)PivotItems:菜譜信息(、描述、烹飪方法和時(shí)間);成分和(由用戶提交的)。WindowsPhone應(yīng)用同樣包含工具條,其中包含一些類加一個(gè)新的頁(yè)面,命名為RecipeDetailPage.做和之前PivotSystemTray屬性,修改LayoutRootbackground屬性,刪除LayoutRootLayoutRootGridPivot3PivotItems<!--PivotControl--<controls:Pivot<Imagex:Name="imgLogo"Width="{StaticResourceLogoImageWidth}"/><!--Pivotitemone--

<TextBlockText="{BindingTitle}"<RowDefinition<RowDefinition<RowDefinition<ImageSource="{BindingBackgroundImage}"<ScrollViewer<TextBlockText="{BindingDirections}"

<StackPanelGrid.Row="2"<TextBlockText="Preptime:"FontSize="24"

<TextBlockText="{BindingPrepTime}"<!--Pivotitemtwo--

<TextBlockText="Ingredients"<ListBoxx:Name="lstIngredieants"ItemsSource="{BindingIngredients}">

<TextBlock

<!--Pivotitemthree--<controls:PivotItem

<TextBlockText="MyPictures"<TextBlockText="Noimagesfound."Foreground="{StaticResourceCustomGroupTitleBrush}"FontSize="24"HorizontalAlignment="Center"Visibility="{BindingUserImages,Converter={StaticResourceImagesDis <ListBoxx:Name="listUserPictures"ItemsSource="{Binding<ListBoxx:Name="listUserPictures"ItemsSource="{BindingUserImages}"> <ImageConverter={StaticResourceFill="{StaticResourceCustomListViewItemOverlayBackgroundBrush}"Text="{BindingConverter={StaticResourceToStringConverter}}" :ApplicationBar:ApplicationBarIsVisible="True"Mode="Default"

IconUri="/Assets/Icons/camera.png"Click="b Text="TakePicture"/>IconUri="/Assets/Icons/share.png"Click="btnShareShareTask_Click"Text="ShareImage"/>:ApplicationBarIconButtonx:Name="btnStartCooking"IconUri="/Assets/Icons/alarm.png"Click="btnStartCooking_Click"Text="StartCooking"/>:ApplicationBarIconButtonx:Name="btnPinToStart"IconUri="/Assets/Icons/like.png"Click="btnPinToStart_Click"Text="PinToStart"/>最后,我們?cè)谖募显黾犹幚韕rivateprivatevoid akePicture_Click(objectsender,EventArgs{}privatevoidbtnShareShareTask_Click(objectsender,EventArgs{}privatevoidbtnStartCooking_Click(objectsender,EventArgs{}privatevoidbtnPinToStart_Click(objectsender,EventArgs{}回顧我們的變動(dòng),須從頭開(kāi)始重寫大部分xaml頁(yè)面。Windows8和WindowsPhone8是使用者不同的API和設(shè)計(jì)方案的不同操作系統(tǒng)。這使得幾乎不可能直接導(dǎo)入10英寸(或更大)xaml5英寸的屏幕設(shè)計(jì)。不過(guò),Styles。Windows8WindowsPhone的樣式傳輸有著相似的外觀。可能會(huì)有小的需1中的CustomStyles.xaml文數(shù)據(jù)模板DataTem tes。所有WindowsStore應(yīng)用創(chuàng)建的數(shù)據(jù)模板都可以幾乎無(wú)修改的WindowsPhone屏幕。注意:通常情況下,樣式和數(shù)據(jù)模板使用注意:通常情況下,樣式和數(shù)據(jù)模板使用WindowsStorebrushes。在這些情況下,當(dāng)移植到WindowsPhone8上需要一些必要的調(diào)整,用WindowsPhone的組建當(dāng)你設(shè)計(jì)應(yīng)用并意圖部署到Windows8和WindowsPhone8上時(shí),需要考慮本實(shí)驗(yàn)中xaml問(wèn)題。當(dāng)設(shè)計(jì)并使用Windows8樣式和模板時(shí),請(qǐng)尋找一些很容易移植到WindowsPhone8上的方案。2:ContosoCookbook業(yè)務(wù)邏當(dāng)完成遷移我們應(yīng)用的展示層后,我們需要遷移業(yè)務(wù)邏輯。兩者都使用C#作為程序語(yǔ)言,這意味WindowsStore應(yīng)用和WindowsPhone任務(wù)1—確定可重用的業(yè)務(wù)邏VisualStudio的解決方案資源管理器中打開(kāi)WindowsStore(在實(shí)驗(yàn)中有提供),并展Data文件夾。數(shù)據(jù)項(xiàng)目文件夾與文打開(kāi)并瀏覽Recipes.txt(先忽略該文件夾下其他文件)。Recipes.txt文件包含JSON結(jié)構(gòu)(食譜和組)。我們會(huì)在WindowsPhone中使用這個(gè)文件。創(chuàng)建一個(gè)新文件夾并命名為Data,從[實(shí)驗(yàn)安裝文件夾]/Assets/Code/Ex2/Data中加入Recipes.txt.在解決方案資源管理器中繼續(xù)在WindowsStore項(xiàng)目中,展開(kāi)DataModel在WindowsStoreDataModel4個(gè)文件。其中一些文件比如ProductLicenseDataSource.csAppLicencseDataSource.cs并不在WindowsPhone應(yīng)用中使用,他們是和WindowsStore應(yīng)用模式相關(guān)的文件。RecipeDataSource.csSampleDataSource.cs大部分代碼不包括任何一個(gè)Windows8WindowsPhoneRecipeDataSource.csJsonArray(在RecipeDataSource.LoadLocalDataAsync方法中),這不符合WindowsPhone8。下一個(gè)任最后,全部文件夾(從實(shí)安裝文件夾/Ase/od/EIaes)到項(xiàng)目。最ontoookbok的ilio解決加載完的項(xiàng)任務(wù)2—遷移數(shù)據(jù)加載方Windows8介紹了以Windows.Data.Json命名空間去處理以JSON為格式的數(shù)據(jù)。而這命名空間在WindowsPhone8平臺(tái)中是不存在的。因此,加載Recipes.txt文件,我們修改JsonArray對(duì)象(和另外一些Windows8相關(guān)的的JSON類)為D ontractJsonSerializer類。在WindowsStore應(yīng)用中,我們用以下代碼來(lái)加載reciptesC#C#(WindowsStoreapp,publicpublicstaticasyncTask{////RetrieverecipedatafromRecipes.txtvarfile=awaitvarresult=awaitFileIO.ReadTextAsync(file);//ParsetheJSONrecipevarrecipes=//ConverttheJSONobjectsintoRecipeDataItemsand//Therestof為了在WindowsPhone中使用這些方法,我們用DontractJsonSerializer來(lái)代替JsonArray類。Recipes.txt文件的相關(guān)代碼會(huì)更換。由此設(shè)計(jì)的WindowsPhone代碼會(huì)像以下:publicpublicasyncvoid{//Retrieverecipedatafromvarsri=App.GetResourceStream(newList<Type>types=newList<Type>(); ontractJsonSerializerdeserializer= IEnumerable<RecipeDataItem>data=//TherestofC#(WindowPhoneapp,注意:這段代碼未完成,還有一些代碼才能遷移到WindowsPhone上。為簡(jiǎn)便期間省略UI組件背后的代碼。盡管一般這生成UI在兩個(gè)平臺(tái)上的流程是一樣,但不同的導(dǎo)加入相關(guān)文件到WindowsPhone項(xiàng)目并數(shù)據(jù)源。在WindowsPhone項(xiàng)目中創(chuàng)DataModel項(xiàng)目文件夾并加入來(lái)自[實(shí)驗(yàn)安 App.xaml.csapp類中并usingusingApppublicpublicstaticRecipeDataSourceRecipes{get;set;RecipesRecipes=newMainPage.xaml.cs文件,并添加下面的usingusingusing當(dāng)應(yīng)用正在加載數(shù)據(jù)時(shí),前端頁(yè)面應(yīng)該顯示進(jìn)度指示條。在WindowsPhone應(yīng)用ProgressIndicator在系統(tǒng)托盤區(qū)顯示。在MainPage類的里面加入以.ProgressIndicator接下來(lái),我們會(huì)加載食譜數(shù)據(jù)并綁定食譜數(shù)據(jù)集到UI。最好的初始化代碼是OnNavigateToMainPage類中加}}pi.IsVisible= ontext=awaitprotectedasyncoverride{if{pi=new pi.IsIndeterminate=true;pi.Text="Loadingdata,pleasewait...";pi.IsVisible=true;}}ProgressIndicator。然后,一旦代碼獲得了食譜數(shù)據(jù)(使用LoadLocalDataAsync方法),則綁定食譜組到我們?cè)诰毩?xí)1中創(chuàng)建的ListBox的D 完成主界面移植后的效privateprivatevoidlstGroups_SelectionChanged(object{if(lstGroups.SelectedIndex>-{Uri("/GroupDetailPage.xaml?ID="+(lstGroups.SelectedItem}}GroupDetailPageGroupDetailPage.xaml.cs文件并在頂部加入usingusingRecipeDataGroupRecipeDataGroupOnNavigatedTo方法用來(lái)接受groupID(從主頁(yè)跳轉(zhuǎn)過(guò)來(lái)的參數(shù))并設(shè)定Pivot控件Dontext的組。在GroupDetailPage類中protectedprotectedoverridevoidOnNavigatedTo(NavigationEventArgs{stringUniqueId=NavigationContext.QueryString["ID"];group=App.Recipes.FindGroup(UniqueId); ontext=}lstRecipes_SelectionChanged方法:privateprivatevoidlstRecipes_SelectionChanged(object{if(lstRecipes.SelectedItems.Count>Uri("/RecipeDetailPage.xaml?ID="+(lstRecipes.SelectedItem}在這個(gè)階段運(yùn)行主要頁(yè)面依然是有著完整的功能(圖16)。點(diǎn)擊食譜組會(huì)跳轉(zhuǎn)到食譜組詳細(xì)信選中食譜組的食接下來(lái),我們修改食譜詳細(xì)信息頁(yè)面來(lái)展示食譜信息。打開(kāi)RecipeDetailsPage.xaml.cs文usingusingprivateprivateRecipeDataItemOnNavigatedTo方法來(lái)載入食譜信息綁定UIprotectedprotectedasyncoverridevoidOnNavigatedTo(NavigationEventArgs{stringUniqueId=UniqueId=NavigationContext.QueryString["ID"];if(!App.Recipes.IsLoaded)await}privatevoidNavigateToRecipe(string{item=App.Recipes.FindRecipe(UniqueId); ontext=item;}菜譜細(xì)節(jié)頁(yè)配料雖然應(yīng)用已經(jīng)完成了所有的基本功能,但是它依然缺乏WindowsStoreWindowsStore應(yīng)用練習(xí)3:特有功這個(gè)練習(xí)的重點(diǎn)是Windows8和的特殊功能模塊的差異許多Windows8的特定功能在WindowsPhone8中稍有不同的形式。為了成功的移植一個(gè)WindowsStore的應(yīng)用程序,你需要了解哪些功能存在並需要修改,哪些功能根本不支持。超級(jí)工具邊欄(Charms)Windows8介紹了一些新功能。Windows8使用“共享邊欄”去共享數(shù)據(jù),應(yīng)用只需要數(shù)據(jù)類型即可。任何其它應(yīng)用都可以處理由你應(yīng)用Windows8邊邊欄在WindowsPhone中是不可用的。但是有一些其他的方案可以達(dá)到這些。WindowsPhone可用一種特定的在.Phone.Tasksn命名空間下的任務(wù)去達(dá)到邊下面是一些WindowsPhone訂(Pinning)API細(xì)節(jié)而兩者API細(xì)節(jié)稍有不同。Windows8使用ToastNotificationManager類(在Windows.UI.Notifications命名空間下),而則使用S Toast類(在 命名空間下)。盡管我們WindowsPhone應(yīng)用可以重新創(chuàng)建一個(gè)Reminder類(在.Phone.Scheduler命名空間下)。ReminderScheduledActionService(同樣名空間下)來(lái)定時(shí)通知,是最適合我們應(yīng)用——提醒用戶烹飪過(guò)程的時(shí)間計(jì)時(shí)任務(wù)1實(shí)現(xiàn)WindowsPhone8圖像共在原始的WindowsStore使用共享邊欄來(lái)共戶捕捉到的圖像并利用內(nèi)置圖像捕捉API來(lái)拍照。這些功能都在WindowsPhone上有,但是API不同。我們開(kāi)始替換捕捉功能。為了捕捉圖像,我們會(huì)用CameraCaptureTask類,然后,替代Windows8ShareMediaTaskWindowsPhone8任務(wù),允許應(yīng)用共些用戶到社交網(wǎng)絡(luò)——通過(guò)標(biāo)準(zhǔn)。usingusingusingRecipeDetailPageCameraCaptureTaskCameraCaptureTask ponent:之后cameracamera=newpleted (CameraCaptureTaskCompleted事 pleted(objectsender,PhotoResult{if(e.TaskResult=={System.Windows.Media.Imaging.BitmapImagebmp=newusing(IsolatedStorageFileisoStore={if(!isoStore.DirectoryExists(item.Group.Title))

stringfileName=string.Format("{0}/{1}.jpg",DateTime.Now.ToString("dd-MM-yyyyHH-using(IsolatedStorageFileStreamtargetStream={}

WriteableBitmapwb=wb.SaveJpeg(targetStream,wb.PixelWidth,wb.PixelHeight,0,100);if(null==item.UserImages)item.UserImages=new}}}上面代碼會(huì)保存用戶拍攝下的到應(yīng)用的獨(dú)立文件夾中最后,我們添加實(shí)際的代碼來(lái)拍攝圖像。你還記得練習(xí)2中,我們創(chuàng)建了一個(gè)空的處理程序的應(yīng)用程序任務(wù)的“拍照”按鈕。找到b akePicture_Click方法,并添加下面代{}catch(System.InvalidOperationException{MessageBox.Show("Anerror}ShareMediaTaskShareMediaTaskshareMediaTask=newif(null!=item.UserImages&&item.UserImages.Count>0)shareMediaTask.FilePath=string.Format("{0}",shareMediaTask.FilePath=string.Format("{0}",這允許用戶在社交網(wǎng)絡(luò)上共享圖像,并替換原來(lái)的WindowsStore注意:您不能在Windows注意:您不能在WindowsPhone試任務(wù)2—開(kāi)發(fā)二級(jí)磁貼訂的功應(yīng)的功能上。二級(jí)磁貼在兩者平臺(tái)上都支持,但是API不同。為了訂一個(gè)二級(jí)磁貼到Windows8上。我們需要?jiǎng)?chuàng)建一個(gè)SecondaryTile類(在Windows.UI.StartScreen命名空間中)的實(shí)體,初始化磁貼中的數(shù)據(jù),并調(diào)用Req privateprivateasyncvoidOnPinRecipeButtonClicked(objectsender,RoutedEventArgs{varitem=(RecipeDataItem)this.flipView.SelectedItem;varuri=newUri(item.TileImagePath.AbsoluteUri);vartile=new//Tile//Tileshort//Tiley//ActivationTileOptions.ShowNameOnLogo,//Tile //TilelogoC#(WindowsStoreawait}WindowsPhone上,磁貼創(chuàng)建過(guò)程很類似Windows8Tile對(duì)象,我們創(chuàng)建一個(gè)StandardTileData類(在Windows.Phone.S命名空間中)STile.Create方法(在.Phone.S命名空間中)來(lái)創(chuàng)建一個(gè)磁貼,如下所示:publicpublicstaticvoidSetTile(RecipeDataItemitem,string{StandardTileDatatileData=new{Title="ContosoCookbook",BackTitle=item.Group.Title,BackContent=item.Title,BackBackgroundImage=newUri(item.Group.GetImageUri(),BackgroundImage=newUri(item.GetImageUri(), Tile.Create(newUri(NavSource,UriKind.Relative),}現(xiàn)在,我們會(huì)移植二級(jí)磁貼的代碼到WindowsPhone把Features.cs文件[實(shí)驗(yàn)安裝文件夾 mon加入到VisualStudioCommonFeatures.csTileSetTileTileTileExists如果二級(jí)磁貼存在,返回truefalseDeleteTile注意注意:Features.csNotifications類,將會(huì)在下個(gè)任務(wù)中介紹。(RecipeDetailPage.xaml.cs)Tile類。從添加命名空間using2privateprivateconststringremoveFavUri="/Assets/Icons/unlike.png";privateconststringFavUri="/Assets/Icons/like.png";ApplicationBar

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論