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

下載本文檔

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

文檔簡介

Windows8WindowsPhone8Lab Last 概 練習(xí)1:遷移CONTOSOCOOKBOOK 任務(wù)1—創(chuàng)建一個新的項(xiàng)目并導(dǎo)入Common和Asset文 任務(wù)2—移植主頁 任務(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—開發(fā)二級磁貼訂的功 任務(wù)3—開發(fā)WindowsPhone8中的提醒功 總 概新的WindowsPhone8操作系統(tǒng)給應(yīng)用開發(fā)者提供了一些全新的和更新的功能,包括C++的本地游戲開發(fā),定制版的WindowsRuntime(WinRT),并與Windows8共個新內(nèi)核。WindowsPhone8并不需完整WindowsRuntime功能,因?yàn)閃indowsRuntime針對的是臺式機(jī)和平板設(shè)備。Windows8Runtime包含很多與WindowsPhone無關(guān)的功能,這些功能也不會在其它版本的WindowsPhone上工作。并且,WindowsPhone8提供了和相關(guān)的獨(dú)特功能,這些在.Phone這個命名空間內(nèi)(延續(xù)于先前的WindowsPhone版本)。這個命名空間以及它的功能是只是WindowsPhone8才會相關(guān)有用,并不是所有的Windows8設(shè)備。這個實(shí)驗(yàn)會告訴你如何將WindowsStore(Windows8)應(yīng)用轉(zhuǎn)變成WindowsPhone8當(dāng)移植一個WindowsStore應(yīng)用到上時,你會很有可能遇到編譯錯誤,因?yàn)閃indows8API不能在WindowsPhone上的WindowsRuntime上運(yùn)行。以下是需要被解決的問題:Phone應(yīng)用必須使用WindowsPhoneAPI,或者在上去模仿Windows8上的功能。例如,和WindowsPhone8相比,Windows8CharmsAPI有不同的API集和設(shè)計方法。你不得不決定WindowsPhoneShareCharm是否和適合代替Windows8共享邊欄。功能丟失。一些Windows8功能并不存在于WindowsPhoneRuntime上。例如,你的WindowsStore應(yīng)用很肯能使用例如GridView這種控件,而這種控件不存在于WindowsPhone里。在這樣的情況,你需要使用一種不同的內(nèi)容控件來展示你的數(shù)據(jù)。方向。默認(rèn)的WindowsStore應(yīng)用是橫向的,而默認(rèn)的WindowsPhone是縱向Windows8使用水平布局,而WindowsPhone使用垂直布XAML。WindowsStore應(yīng)用使用一個稍微不同于WindowsPhone8的版本。比如,命名屏幕尺寸。WindowsStore10英寸或者更大的,并且最小分辨率是1024x768的屏幕上運(yùn)行。而WindowsPhone5英寸的屏幕上。往往需要一個不同的視圖布局。另外,WindowsPhone8的設(shè)備選擇比Windows8更為在考慮完這些問題后,改寫我們應(yīng)用的xaml頁面并重用一小部分現(xiàn)有代碼。當(dāng)然也有一些在本次試驗(yàn)中,我們會使用ContosoCookbook為樣品。這是一個簡單的WindowsStore,并且它已經(jīng)在我們的Windows8培訓(xùn)工程包內(nèi)。注意:注意:Windows8[實(shí)驗(yàn)包安裝路徑]/Assets/ContosoCookBook請花一些時間去打開WindowsStore應(yīng)用工程并讓你自己熟悉一下這個應(yīng)用注意:本實(shí)驗(yàn)不注意:本實(shí)驗(yàn)不供如何移植iwsre應(yīng)用到Wiws8自動防出錯方案。它提了你很可能遇到的移植題的解決準(zhǔn)。盡管實(shí)驗(yàn)包許多共同的移植題,它也不一個完整的能出現(xiàn)任何移植題的工程解方案。最后該驗(yàn)沒有解決游戲多 應(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練遷移遷移估計完成此實(shí)驗(yàn)的時間45601:ContosoCookbook在開始遷移開始之前,熟悉一下ContosoCookbookContosoCookbookWindows8應(yīng)用主頁該包括3頁,管理和顯示食譜。食譜屬于組,由美食類型分組。主要頁面(見圖2)展示美食食譜組頁食譜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)航中,展開模板(Temtes),然后展開VisualC#,然后點(diǎn)擊Windows在右側(cè)菜單中,點(diǎn)擊WindowsPhone應(yīng)用。名字ContosoCookbookOK創(chuàng)建一個新的應(yīng)在版本選擇框中,選擇“WindowsPhoneOS8.0”點(diǎn)擊OK版本選擇會用這些文件來作為WindowsPhone應(yīng)用的圖標(biāo)。在解決方案資源管理器跳轉(zhuǎn)到屬性文件夾的應(yīng)用程序中(WMAppManifest.xmlfile)并雙擊它,VisualStudio會打開該的設(shè)計頁面。更改顯示名字(DisyName)為ContosoCookbook(見圖7)AppIconApplicationIcon.pngSmallMediumTileImagesBackground.png文件。應(yīng)用程序修創(chuàng)建一個新的項(xiàng)目文件夾:項(xiàng)目名字,選擇Add并新建文件夾。把這文件夾命創(chuàng)建一個新文件正如前面提到的,一些WindowsStore的應(yīng)用程序的代碼是“基本兼容”的WindowsPhone。這是一個很好的例子值轉(zhuǎn)換器(IValueConverter的實(shí)現(xiàn))。這兩個平臺之間的差異是命名空間(WindowsStoreSystem.Windows.Data和WindowsPhone的Windows.UI.Xaml.Data)IValueConverter.Convert方法的最后一個參數(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)目中添加接下來,我們把WindowsStoreassets轉(zhuǎn)移出來。使用和前面指導(dǎo)相同的步驟來assets從[實(shí)驗(yàn)安裝文件夾]/Assets/Code/Ex1/AssetsWindowsPhone應(yīng)用中的“Assets”文件夾。當(dāng)這么做時,請保持文件夾下的結(jié)構(gòu)(比如創(chuàng)建一個子圖標(biāo)文件夾,并增加相應(yīng)的文件等)10相似。加入AddedAssets后的項(xiàng)目結(jié)接下來,我們對App.xamlassetsApp.xaml<local:LocalizedStringsxmlns:local="clr-namespace:ContosoCookbook"<sys:Stringx:Key="AppName">Contoso<sys:Double yConverter yConverter <ResourceDictionary2xml UI任務(wù)2移植主頁打開WindowsStoreContosoCookbook應(yīng)用的主頁面(GroupedItemsPage.xaml文件).必須考XAML元素是不同的。WindowsStore應(yīng)用的根元素是LayoutAwarePage頁面類中的derives),而WindowsPhone則有PhoneApplicationPage作為根元素。WindowsStoreXAML包含Grid2退按鈕,另外一行是頁面內(nèi)容。下面就是這個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)新建一個WindowsPhoneVisualStudio會自動創(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,由一個兩行的Grid控件的默認(rèn)模板。第一行是應(yīng)用程序的標(biāo)題和頁面標(biāo)題。第二行包含另一個Grid控制頁面的內(nèi)容。比較完WindowsPhone8和WindowsStore應(yīng)用的主頁面后,我們應(yīng)當(dāng)在Grid頭部做兩處修改,weshouldmaketwochangestothegrid’sheader:方向。WindowsPhoneStackPanel2后退按鈕。都有一個硬件返回按鈕。這意味著屏幕上的返回按鈕是多余的。在一般情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(語義縮放)WindowsPhone注釋:注釋:SemanticZoom是一個優(yōu)化的觸摸技術(shù),使用WindowsStore的應(yīng)用程序在Windows8能在一個單一的視圖(如相冊,應(yīng)用程序列表,或地址簿)中瀏覽 信息,請參閱Windows8的文檔: /en-WindowsStore應(yīng)用的內(nèi)容選擇是通過一系列SemanticZoomXAML.它定義了兩組視圖,分別是“ZoomedIn”“ZoomedOut”狀態(tài)。WindowsPhone不支持SemanticZoom“ZoomedIn”狀態(tài)作為我們WindowsPhone應(yīng)用代碼。以下是WindowsStore“ZoomedIn”狀態(tài)的對應(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增加一個帶HeaderTemte的GroupStyle和一個ItemsPanelTemteGridView控件更適合水平布局的瀏覽,用一個ListBox控件取代它,使得更適合垂直布局。另外,我們改編了ListBoxItemsPanelVirtualizingStackPanel因?yàn)樗苁紫?,?chuàng)建一個新的模版,來展現(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頁面根元素上做一些小的改動。修改SystemTray.IsVisibleFalse默認(rèn)為ss現(xiàn)在,改編LayoutRootGrid“LayoutRootGrid元素,修改Background="{StaticResourceBackground="{StaticResource最后,我們需要實(shí)現(xiàn)ListBox的SelectionChanged的觸發(fā)。打開MainPage.xaml.cs文MainPageclass中加入以下代碼:privateprivatevoidlstGroups_SelectionChanged(object{}注意:GroupedItemsPage.xamlSnappedview(帖靠視圖)同樣在WindowsPhone中不支持,我們需要注釋掉這些代碼。任務(wù)3—移注意:GroupedItemsPage.xamlSnappedview(帖靠視圖)同樣在WindowsPhone中不支持,我們需要注釋掉這些代碼。在移植過程中的GroupDetailPage.xaml頁面將包含我們還沒有遇到的的問題。本組的詳細(xì)信息頁分組詳細(xì)信息為了移植這個頁面到WindowsPhone上,我們需要一個與相關(guān)的方法去顯示分欄的視圖(第一排:組信息,第二排:食譜信息)。因?yàn)槭强v向的,我們使用Pivot控件。Pivot控件頁面可第一個Pivot頁面顯示組信息,另一個Pivot頁面顯示食譜信息。給應(yīng)用添加一個新的頁面。在VisualStudio解決方案瀏覽器中,項(xiàng)目名稱,點(diǎn)擊為項(xiàng)目新增在打開的框中,選擇WindowsPhone縱向頁面,命名為GroupDetailPage.xaml,然后點(diǎn)增加一個新的WindowsPhone縱向頁我們現(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)的。打開GroupDetailPage.xaml.cs文件并添加以下代privateprivatevoidlstRecipes_SelectionChanged(object{} 任務(wù)4—移植食譜詳細(xì)在WindowsStoreFlipViewGrid控件。FlipView控件食譜詳細(xì)WindowsPhoneFlipView控件,這意味著這些功能必須被替換。我們用Pivot控件來代替原來的多列表格。原始頁面是3列g(shù)rid。我們用3個PivotItems:菜譜信息(、描述、烹飪方法和時間);成分和(由用戶提交的)。WindowsPhone應(yīng)用同樣包含工具條,其中包含一些類加一個新的頁面,命名為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"/>最后,我們在文件上增加處理privateprivatevoid akePicture_Click(objectsender,EventArgs{}privatevoidbtnShareShareTask_Click(objectsender,EventArgs{}privatevoidbtnStartCooking_Click(objectsender,EventArgs{}privatevoidbtnPinToStart_Click(objectsender,EventArgs{}回顧我們的變動,須從頭開始重寫大部分xaml頁面。Windows8和WindowsPhone8是使用者不同的API和設(shè)計方案的不同操作系統(tǒng)。這使得幾乎不可能直接導(dǎo)入10英寸(或更大)xaml5英寸的屏幕設(shè)計。不過,Styles。Windows8WindowsPhone的樣式傳輸有著相似的外觀。可能會有小的需1中的CustomStyles.xaml文數(shù)據(jù)模板DataTem tes。所有WindowsStore應(yīng)用創(chuàng)建的數(shù)據(jù)模板都可以幾乎無修改的WindowsPhone屏幕。注意:通常情況下,樣式和數(shù)據(jù)模板使用注意:通常情況下,樣式和數(shù)據(jù)模板使用WindowsStorebrushes。在這些情況下,當(dāng)移植到WindowsPhone8上需要一些必要的調(diào)整,用WindowsPhone的組建當(dāng)你設(shè)計應(yīng)用并意圖部署到Windows8和WindowsPhone8上時,需要考慮本實(shí)驗(yàn)中xaml問題。當(dāng)設(shè)計并使用Windows8樣式和模板時,請尋找一些很容易移植到WindowsPhone8上的方案。2:ContosoCookbook業(yè)務(wù)邏當(dāng)完成遷移我們應(yīng)用的展示層后,我們需要遷移業(yè)務(wù)邏輯。兩者都使用C#作為程序語言,這意味WindowsStore應(yīng)用和WindowsPhone任務(wù)1—確定可重用的業(yè)務(wù)邏VisualStudio的解決方案資源管理器中打開WindowsStore(在實(shí)驗(yàn)中有提供),并展Data文件夾。數(shù)據(jù)項(xiàng)目文件夾與文打開并瀏覽Recipes.txt(先忽略該文件夾下其他文件)。Recipes.txt文件包含JSON結(jié)構(gòu)(食譜和組)。我們會在WindowsPhone中使用這個文件。創(chuàng)建一個新文件夾并命名為Data,從[實(shí)驗(yàn)安裝文件夾]/Assets/Code/Ex2/Data中加入Recipes.txt.在解決方案資源管理器中繼續(xù)在WindowsStore項(xiàng)目中,展開DataModel在WindowsStoreDataModel4個文件。其中一些文件比如ProductLicenseDataSource.csAppLicencseDataSource.cs并不在WindowsPhone應(yīng)用中使用,他們是和WindowsStore應(yīng)用模式相關(guān)的文件。RecipeDataSource.csSampleDataSource.cs大部分代碼不包括任何一個Windows8WindowsPhoneRecipeDataSource.csJsonArray(在RecipeDataSource.LoadLocalDataAsync方法中),這不符合WindowsPhone8。下一個任最后,全部文件夾(從實(shí)安裝文件夾/Ase/od/EIaes)到項(xiàng)目。最ontoookbok的ilio解決加載完的項(xiàng)任務(wù)2—遷移數(shù)據(jù)加載方Windows8介紹了以Windows.Data.Json命名空間去處理以JSON為格式的數(shù)據(jù)。而這命名空間在WindowsPhone8平臺中是不存在的。因此,加載Recipes.txt文件,我們修改JsonArray對象(和另外一些Windows8相關(guān)的的JSON類)為D ontractJsonSerializer類。在WindowsStore應(yīng)用中,我們用以下代碼來加載reciptesC#C#(WindowsStoreapp,publicpublicstaticasyncTask{////RetrieverecipedatafromRecipes.txtvarfile=awaitvarresult=awaitFileIO.ReadTextAsync(file);//ParsetheJSONrecipevarrecipes=//ConverttheJSONobjectsintoRecipeDataItemsand//Therestof為了在WindowsPhone中使用這些方法,我們用DontractJsonSerializer來代替JsonArray類。Recipes.txt文件的相關(guān)代碼會更換。由此設(shè)計的WindowsPhone代碼會像以下:publicpublicasyncvoid{//Retrieverecipedatafromvarsri=App.GetResourceStream(newList<Type>types=newList<Type>(); ontractJsonSerializerdeserializer= IEnumerable<RecipeDataItem>data=//TherestofC#(WindowPhoneapp,注意:這段代碼未完成,還有一些代碼才能遷移到WindowsPhone上。為簡便期間省略UI組件背后的代碼。盡管一般這生成UI在兩個平臺上的流程是一樣,但不同的導(dǎo)加入相關(guān)文件到WindowsPhone項(xiàng)目并數(shù)據(jù)源。在WindowsPhone項(xiàng)目中創(chuàng)DataModel項(xiàng)目文件夾并加入來自[實(shí)驗(yàn)安 App.xaml.csapp類中并usingusingApppublicpublicstaticRecipeDataSourceRecipes{get;set;RecipesRecipes=newMainPage.xaml.cs文件,并添加下面的usingusingusing當(dāng)應(yīng)用正在加載數(shù)據(jù)時,前端頁面應(yīng)該顯示進(jìn)度指示條。在WindowsPhone應(yīng)用ProgressIndicator在系統(tǒng)托盤區(qū)顯示。在MainPage類的里面加入以.ProgressIndicator接下來,我們會加載食譜數(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方法),則綁定食譜組到我們在練習(xí)1中創(chuàng)建的ListBox的D 完成主界面移植后的效privateprivatevoidlstGroups_SelectionChanged(object{if(lstGroups.SelectedIndex>-{Uri("/GroupDetailPage.xaml?ID="+(lstGroups.SelectedItem}}GroupDetailPageGroupDetailPage.xaml.cs文件并在頂部加入usingusingRecipeDataGroupRecipeDataGroupOnNavigatedTo方法用來接受groupID(從主頁跳轉(zhuǎn)過來的參數(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}在這個階段運(yùn)行主要頁面依然是有著完整的功能(圖16)。點(diǎn)擊食譜組會跳轉(zhuǎn)到食譜組詳細(xì)信選中食譜組的食接下來,我們修改食譜詳細(xì)信息頁面來展示食譜信息。打開RecipeDetailsPage.xaml.cs文usingusingprivateprivateRecipeDataItemOnNavigatedTo方法來載入食譜信息綁定UIprotectedprotectedasyncoverridevoidOnNavigatedTo(NavigationEventArgs{stringUniqueId=UniqueId=NavigationContext.QueryString["ID"];if(!App.Recipes.IsLoaded)await}privatevoidNavigateToRecipe(string{item=App.Recipes.FindRecipe(UniqueId); ontext=item;}菜譜細(xì)節(jié)頁配料雖然應(yīng)用已經(jīng)完成了所有的基本功能,但是它依然缺乏WindowsStoreWindowsStore應(yīng)用練習(xí)3:特有功這個練習(xí)的重點(diǎn)是Windows8和的特殊功能模塊的差異許多Windows8的特定功能在WindowsPhone8中稍有不同的形式。為了成功的移植一個WindowsStore的應(yīng)用程序,你需要了解哪些功能存在並需要修改,哪些功能根本不支持。超級工具邊欄(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)建一個Reminder類(在.Phone.Scheduler命名空間下)。ReminderScheduledActionService(同樣名空間下)來定時通知,是最適合我們應(yīng)用——提醒用戶烹飪過程的時間計時任務(wù)1實(shí)現(xiàn)WindowsPhone8圖像共在原始的WindowsStore使用共享邊欄來共戶捕捉到的圖像并利用內(nèi)置圖像捕捉API來拍照。這些功能都在WindowsPhone上有,但是API不同。我們開始替換捕捉功能。為了捕捉圖像,我們會用CameraCaptureTask類,然后,替代Windows8ShareMediaTaskWindowsPhone8任務(wù),允許應(yīng)用共些用戶到社交網(wǎng)絡(luò)——通過標(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}}}上面代碼會保存用戶拍攝下的到應(yīng)用的獨(dú)立文件夾中最后,我們添加實(shí)際的代碼來拍攝圖像。你還記得練習(xí)2中,我們創(chuàng)建了一個空的處理程序的應(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ò)上共享圖像,并替換原來的WindowsStore注意:您不能在Windows注意:您不能在WindowsPhone試任務(wù)2—開發(fā)二級磁貼訂的功應(yīng)的功能上。二級磁貼在兩者平臺上都支持,但是API不同。為了訂一個二級磁貼到Windows8上。我們需要創(chuàng)建一個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)建過程很類似Windows8Tile對象,我們創(chuàng)建一個StandardTileData類(在Windows.Phone.S命名空間中)STile.Create方法(在.Phone.S命名空間中)來創(chuàng)建一個磁貼,如下所示: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)在,我們會移植二級磁貼的代碼到WindowsPhone把Features.cs文件[實(shí)驗(yàn)安裝文件夾 mon加入到VisualStudioCommonFeatures.csTileSetTileTileTileExists如果二級磁貼存在,返回truefalseDeleteTile注意注意:Features.csNotifications類,將會在下個任務(wù)中介紹。(RecipeDetailPage.xaml.cs)Tile類。從添加命名空間using2privateprivateconststringremoveFavUri="/Assets/Icons/unlike.png";privateconststringFavUri="/Assets/Icons/like.png";ApplicationBar

溫馨提示

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

評論

0/150

提交評論