session2構(gòu)建wp8應(yīng)用程序_第1頁
session2構(gòu)建wp8應(yīng)用程序_第2頁
session2構(gòu)建wp8應(yīng)用程序_第3頁
session2構(gòu)建wp8應(yīng)用程序_第4頁
session2構(gòu)建wp8應(yīng)用程序_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余103頁可下載查看

下載本文檔

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

文檔簡介

構(gòu)建WindowsPhone8

應(yīng)用程序大綱WindowsPhone8.0開發(fā)工具應(yīng)用程序生命周期管理頁面導(dǎo)航ApplicationBar動(dòng)態(tài)更改屏幕方向WP8常用控件數(shù)據(jù)綁定2023/1/17Microsoftconfidential2WindowsPhone8.0開發(fā)工具2023/1/17Microsoftconfidential3如果你開發(fā)WindowsPhoneOS7.1的應(yīng)用程序,必需安裝Zune來連接到WindowsPC也可以進(jìn)行同步媒體執(zhí)行手機(jī)更新WindowsPhone8設(shè)備僅需要一個(gè)USB就可以進(jìn)行連接連接WindowsPhone手機(jī)2023/1/17Microsoftconfidential4注冊開發(fā)手機(jī)你可以將手機(jī)注冊為開發(fā)設(shè)備,將自己的應(yīng)用程序進(jìn)行部署這是一個(gè)特定的手機(jī)個(gè)人開發(fā)者賬號可以注冊三臺設(shè)備學(xué)生開發(fā)者賬號可以注冊一臺設(shè)備2023/1/17Microsoftconfidential5部署到手機(jī)當(dāng)你運(yùn)行程序時(shí),VisualStudio為你應(yīng)用程序允許選擇目標(biāo)設(shè)備兩個(gè)平臺上的開發(fā)環(huán)境是完全相同的對于每一個(gè)應(yīng)用程序可以使用同一種方法進(jìn)行調(diào)試2023/1/17Microsoftconfidential6一旦你將應(yīng)用程序部署到手機(jī)設(shè)備上,該應(yīng)用程序?qū)鎯υ谠O(shè)備中供以后使用手機(jī)中最多部署10個(gè)自己的應(yīng)用程序也可以將編譯好的應(yīng)用程序發(fā)送給其他開發(fā)者,在他們的設(shè)備上進(jìn)行測試手機(jī)中應(yīng)用程序2023/1/17Microsoftconfidential7VisualStudio提供了一個(gè)特別的調(diào)試體驗(yàn)這種體驗(yàn)運(yùn)用到了WindowsPhone中可以為WindowsPhone和WindowsPC應(yīng)用程序進(jìn)行調(diào)試操作斷點(diǎn)Breakpoints單步調(diào)試查看并修改變量VisualStudio調(diào)試2023/1/17Microsoftconfidential8選擇Device作為開發(fā)目標(biāo)。你可以不使用模擬器來測試本地生成的代碼使用Ctrl+F5(不使用調(diào)試按鈕來啟動(dòng))在設(shè)備上部署運(yùn)行應(yīng)用程序或者使用Alt+F1

(啟動(dòng)WindowsPhone性能分析)作為一個(gè)本地優(yōu)化鏡像來測試應(yīng)用程序.測試應(yīng)用程序的性能和響應(yīng)能力作為一個(gè)本地優(yōu)化鏡像來測試應(yīng)用程序2023/1/17Microsoftconfidential9在WindowsPC中,WindowsPhone模擬器作為一個(gè)Hyper-V虛擬機(jī)進(jìn)行運(yùn)行作為一個(gè)“真正”的手機(jī),它包含相同的軟件,是基于WindowsPC構(gòu)建的模擬器還提供了WindowsPhoneSDK可以使用模擬器來測試位置和方向可以使用VisualStudio提供的模擬器儀表盤來管理模擬器狀態(tài)手機(jī)的鎖與解鎖控制性能和可用性的網(wǎng)絡(luò)WindowsPhone模擬器2023/1/17Microsoftconfidential10模擬器是一個(gè)靠譜的方案來模擬應(yīng)用程序在真實(shí)設(shè)備上運(yùn)行的情況WindowsPC的處理器可能比手機(jī)更給力模擬器僅用做功能性測試若擔(dān)心性能上任何問題,可以使用真實(shí)設(shè)備運(yùn)行應(yīng)用程序無論在設(shè)備和模擬器上,可以使用分析工具來檢查應(yīng)用程序的活動(dòng)模擬器性能112023/1/17MicrosoftconfidentialVisualStudio允許選擇目標(biāo)設(shè)備運(yùn)行程序啟動(dòng)第一次部署的模擬器它將會一直運(yùn)行,知道手動(dòng)停止掉,并且在此期間維護(hù)本地存儲提供了多種分辨率的模擬器,增加了WVGA512MB模擬器來效仿低內(nèi)存的WindowsPhone7.5設(shè)備部署到模擬器122023/1/17Microsoftconfidential你能夠使用PC的鼠標(biāo)控制模擬器如果你有一個(gè)多點(diǎn)觸控顯示器,你可以使用多點(diǎn)觸控在顯示器上進(jìn)行縮放操作模擬器會模擬觸摸鍵盤,你講通過點(diǎn)擊上面的按鍵來操作使用PgUp/PgDn按鍵可以在模擬器軟鍵盤和PC鍵盤輸入之間切換模擬器輸入132023/1/17Microsoftconfidential使用模擬器右側(cè)的命令條訪問工具的其他設(shè)置允許將模擬器旋轉(zhuǎn)到不同的方向使用該功能測試軟件對方向變化的響應(yīng)模擬器方向142023/1/17Microsoftconfidential模擬相機(jī)相機(jī)模擬器只能捕獲簡單的圖像并返回你可以使用它來驗(yàn)證應(yīng)用程序調(diào)用拍照任務(wù)并能夠立即獲取到結(jié)果152023/1/17MicrosoftconfidentialDemo1:PhotoSnap2023/1/17MicrosoftconfidentialWindowsPhone應(yīng)用程序能夠使用模擬器生成定位數(shù)據(jù)為了實(shí)現(xiàn)模擬定位我們需要打開位于模擬器右側(cè)的附加工具面板模擬定位17附加工具2023/1/17Microsoftconfidential這是附加工具中的定位欄你能夠點(diǎn)擊任何位置來移動(dòng)模擬器的當(dāng)前坐標(biāo)Youcanalsoplacepushpinstodescribearoute,andthen“replay”thatroute你能夠設(shè)置多個(gè)標(biāo)記來描述一條路線,然后替換該路線18附加工具2023/1/17MicrosoftconfidentialDemo2:Location2023/1/17Microsoftconfidential在模擬器中顯示鎖定屏幕是一種很好的方式測試當(dāng)你的應(yīng)用不可用時(shí)發(fā)生的狀態(tài)變化使用鍵盤:在你的電腦上按下F12鍵兩次使用模擬儀表板:在VisualStudio工具菜單,打開模擬儀表板在模擬器中鎖定屏幕2023/1/17Microsoftconfidential20模擬面板中包含網(wǎng)絡(luò)模擬讓模擬器在不同的模擬網(wǎng)絡(luò)環(huán)境下測試你的應(yīng)用程序模擬網(wǎng)絡(luò)2023/1/17Microsoftconfidential21模擬器的截屏功能非常有用截屏功能的截圖能夠用于文檔和在Marketplace中促銷應(yīng)用模擬器附加工具面板提供了截屏欄截屏222023/1/17Microsoftconfidential在WindowsPhone8中全新支持!同時(shí)按下電源和Windows按鍵通過社交網(wǎng)絡(luò)可以簡單地分享屏幕截圖在真實(shí)設(shè)備上截屏2023/1/17Microsoftconfidential23商店覆蓋的消費(fèi)者:超過180個(gè)國家

120個(gè)以上新增8.029個(gè)國家WindowsPhone7.0180多個(gè)國家WindowsPhone863個(gè)國家WindowsPhone7.5180+123312023/1/17Microsoftconfidential24開發(fā)者:超過180個(gè)國家

140多個(gè)新增7.5&8.038國家WindowsPhone7.x180多個(gè)國家WindowsPhone8.02023/1/17Microsoftconfidential25語言:50種語言

26種新增WindowsPhone7.524LanguagesChineseSimplifiedChineseTraditionalCzechDanishDutchEnglish(US)FinnishFrenchGermanGreekHungarianIndonesianItalianJapaneseKoreanLatvianLithuanianMalayPolishPortuguese(Portugal)Portuguese(Brazil)RussianSpanish(Spain)SwedishWindowsPhone850LanguagesAlbanianArabicAzerbaijani(Latin)BelarusianBulgarianCatalanCroatianEnglish(UK)EstonianFilipinoHebrewHindiKazakhMacedonianNorwegian(Bokm?l)PersianRomanianSerbian(Latin)SlovakSlovenianSpanish(Mexico)ThaiTurkishUkrainianUzbek(Latin)Vietnamese8.02023/1/17Microsoftconfidential26WindowsPhone應(yīng)用生命周期2023/1/17MicrosoftconfidentialTombstonedWindowsPhone應(yīng)用程序在不同的狀態(tài)間過渡啟動(dòng)(Launching)和關(guān)閉(Closing)激活(Activating)和失效(Deactivating)休眠(Dormant)和墓碑(Tomstoned)

WindowsPhone應(yīng)用生命周期2023/1/17MicrosoftconfidentialNotrunningRunningLaunchingClosingDeactivatingActivatingDormant28應(yīng)用程序的生命周期事件WindowsPhone應(yīng)用程序環(huán)境會通過一些事件通知上述狀態(tài),在項(xiàng)目模板里的App.xaml里訂閱了事件,并在App.xaml.cs處理了,初使化情況下處理邏輯是空的。//Codetoexecutewhentheapplicationislaunching(eg,fromStart)//Thiscodewillnotexecutewhentheapplicationisreactivatedprivate

voidApplication_Launching(objectsender,LaunchingEventArgse){}2023/1/17Microsoftconfidential29Demo3:LaunchingandClosing2023/1/17Microsoftconfidential啟動(dòng)和關(guān)閉:Launching和Closing

當(dāng)程序啟動(dòng)時(shí),Applcation_Launching會被調(diào)用程序結(jié)束時(shí),Application_Closing會被調(diào)用調(diào)試器在程序停止后還會繼續(xù)運(yùn)行,所以需要手動(dòng)結(jié)束2023/1/17MicrosoftconfidentialNotrunningRunningApplication_

LaunchingApplication_

Closing31程序的Deactivation和Reactivation出于省電的考慮,任何時(shí)間只有一個(gè)程序運(yùn)行在前臺用戶可以deactivate程序也可以reactivate它們程序需要處理Activated和Deactivated事件2023/1/17Microsoftconfidential32Demo4:DeactivatingandActivating2023/1/17Microsoftconfidential程序的休眠(Dormant)用戶可以隨時(shí)休眠應(yīng)用程序,然后運(yùn)行其他程序Application_Deactivated函數(shù)被調(diào)用

電話和鎖屏程序都會觸發(fā)休眠用戶也可以恢復(fù)休眠的程序。2023/1/17MicrosoftconfidentialTombstonedRunningDeactivatingActivatingDormant34處理休眠當(dāng)程序被休眠時(shí)必須盡可能地保存數(shù)據(jù)因?yàn)槌绦蚩赡軙P(guān)閉,如果用戶不再通過長按Back回到那個(gè)程序,Application_Deactivated就相當(dāng)于Application_Closing了。你的程序有5秒鐘的機(jī)會清理現(xiàn)場(保存數(shù)據(jù)),之后程序會被從內(nèi)存中清除掉。當(dāng)程序長按Back恢復(fù)時(shí),它會自動(dòng)恢復(fù)到Deactivated時(shí)的那個(gè)頁面,這是操作系統(tǒng)幫我們做的,但是,頁面的內(nèi)容并不會自動(dòng)保存。

2023/1/17Microsoftconfidential35從休眠中激活A(yù)ctiveDormant2023/1/17Microsoftconfidential36從休眠到墓碑一個(gè)程序會和其他程序一起在內(nèi)存里休眠,如果操作系統(tǒng)的內(nèi)存不夠用了會釋放最先休眠的程序的緩存狀態(tài),這個(gè)過程叫做“墓碑化”。

頁面導(dǎo)航歷史和緩存狀態(tài)都被墓碑了的程序維護(hù)著。當(dāng)一個(gè)休眠了的程序恢復(fù)時(shí),緩存狀態(tài)會重新加載,程序會萬利到它離開之前的那個(gè)頁面。當(dāng)一個(gè)墓碑了的程序恢復(fù)時(shí),它會重啟離開之前的頁面,但是所有的程序狀態(tài)會丟失,你需要重新加載。一個(gè)程序可以決定從哪個(gè)狀態(tài)激活。

2023/1/17Microsoftconfidential37TombstonedRunningDeactivatingActivatingDormant從墓碑狀態(tài)重新激活A(yù)ctiveDormantTombstoned2023/1/17Microsoftconfidential38從休眠還是墓碑恢復(fù)的?可以在恢復(fù)前做一個(gè)判斷private

voidApplication_Activated(objectsender,ActivatedEventArgse){

if(e.IsApplicationInstancePreserved){

//Dormant-objectsinmemoryintact}

else{

//Tombstoned-needtoreload}}2023/1/17Microsoftconfidential39調(diào)試墓碑狀態(tài)當(dāng)休眠的時(shí)候,可以在VisualStudio里設(shè)置強(qiáng)制程序墓碑化(從內(nèi)存中移除)。你應(yīng)該把這個(gè)做為測試引擎的一部分。你也可以用模擬器操作鎖屏,也可以讓程序進(jìn)入休眠。

2023/1/17Microsoftconfidential40Demo5:DormantvsTombstoned2023/1/17Microsoftconfidential狀態(tài)和墓碑當(dāng)程序從休眠恢復(fù)時(shí),程序會準(zhǔn)確地恢復(fù)到離開時(shí)的頁面,所有的對象和它們的狀態(tài)都在內(nèi)存里,你可能需要寫一些邏輯來重置依賴于時(shí)間或網(wǎng)絡(luò)的調(diào)用代碼。當(dāng)程序從墓碑恢復(fù)時(shí),程序只會恢復(fù)到離開時(shí)的頁面,但所有對象和它們的狀態(tài)都丟失了,所以需要重新加載控件的數(shù)據(jù),這就是為什么需要保存狀態(tài),程序從內(nèi)存中移除了系統(tǒng)也維護(hù)著狀態(tài)。當(dāng)程序的一個(gè)新的實(shí)例啟動(dòng)時(shí),狀態(tài)是空的。如果一個(gè)先前的程序掛起了,那么那個(gè)程序存儲的狀態(tài)字典會丟失。2023/1/17Microsoftconfidential42狀態(tài)字典休眠程序的狀態(tài)信息存在一個(gè)狀態(tài)字典里,如上述代碼??梢栽贏pplication_Deactivated函數(shù)里存儲,然后在頁面激活時(shí)讀取。所以Application_Deactivated有兩件事情要做,保存數(shù)據(jù)以防程序不能重新激活,保存狀態(tài)數(shù)據(jù)以保證程序恢復(fù)到正確的狀態(tài)。

PhoneApplicationService.Current.State["Url"]="";2023/1/17Microsoftconfidential43Deactivation保存數(shù)據(jù)當(dāng)用戶導(dǎo)航離開您的應(yīng)用的某個(gè)頁面時(shí),將會調(diào)用OnNavigatedFrom(NavigationEventArgs)

方法。protected

override

void

OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs

e)

{

base.OnNavigatedFrom(e);

if

(e.NavigationMode

!=

System.Windows.Navigation.NavigationMode.Back

&&

e.NavigationMode

!=

System.Windows.Navigation.NavigationMode.Forward)

{

//

If

we

are

exiting

the

page

because

we've

navigated

backorforward,

//

no

needto

save

transient

data,

because

this

page

iscomplete.

//

Otherwise,

we're

being

deactivated,

so

save

transient

data

//

in

case

we

get

tombstoned

this.State["pleteEntry"]

=

this.logTextBox.Text;

}}2023/1/17Microsoftconfidential44Reactivation恢復(fù)數(shù)據(jù)用戶導(dǎo)航到頁面時(shí),即會調(diào)用OnNavigatedTo(NavigationEventArgs)

方法。protected

override

void

OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs

e)

{base.OnNavigatedTo(e);

//

If

the

State

dictionary

contains

our

transient

data,

//

we're

being

reactivated

so

restore

the

transient

data

if

(this.State.ContainsKey("pleteEntry"))

{

this.logTextBox.Text

=

(string)this.State["pleteEntry"];

}}2023/1/17Microsoftconfidential45頁面導(dǎo)航2023/1/17MicrosoftconfidentialFrame是最外層的窗器,是PhoneApplicationFrame類,包括Page和系統(tǒng)元素(像系統(tǒng)托盤,ApplicationBar)。Page填充整個(gè)Frame的內(nèi)容區(qū)域,從PhoneApplicationPage類派生,包括一個(gè)Title,可選擇是否加入ApplicationBar。Frame和Page2023/1/17Microsoftconfidential47頁面導(dǎo)航基于頁面的導(dǎo)航模式,類似Web頁面導(dǎo)航,每個(gè)頁面有一個(gè)URI,每個(gè)頁面本質(zhì)上是無狀態(tài)的。

private

voidHyperlinkButton_Click_1(

objectsender,RoutedEventArgse){NavigationService.Navigate(

new

Uri("/SecondPage.xaml",UriKind.Relative));}2023/1/17Microsoftconfidential48導(dǎo)航--后退程序提供了導(dǎo)航的接口

物理后退鍵也會引起后退到前頁,而不用寫任何代碼

private

voidButton_Click_1(

objectsender,RoutedEventArgse){NavigationService.GoBack();}2023/1/17Microsoftconfidential49重寫后退按鍵的事件也許需要在用戶按了后退鍵時(shí)做一些程序上的判斷,比如彈出一個(gè)提示窗問用戶是否真的想后退,因?yàn)榭赡苁钦`操作。<phone:PhoneApplicationPagex:Class="PhoneApp1.MainPage"…shell:SystemTray.IsVisible="True"BackKeyPress="PhoneApplicationPage_BackKeyPress">Incode:privatevoidPhoneApplicationPage_BackKeyPress(objectsender,

ponentModel.CancelEventArgse){e.Cancel=true;//Tellsystemwe'vehandledit//Hidethepopup......}2023/1/17Microsoftconfidential50在頁面間傳數(shù)據(jù)在頁面間傳字符串Ondestinationpage目標(biāo)頁面接收

private

voidpassParam_Click(objectsender,RoutedEventArgse)

{

NavigationService.Navigate(new

Uri("/SecondPage.xaml?msg="+textBox1.Text,UriKind.Relative));

}

protectedoverridevoidOnNavigatedTo(System.Windows.Navigation.NavigationEventArgse){

base.OnNavigatedTo(e);

string

querystringvalue="";

if(NavigationContext.QueryString.TryGetValue("msg",outquerystringvalue))textBlock1.Text=querystringvalue;}2023/1/17Microsoftconfidential51在頁面間傳遞對象一種方式是將對象存在App類里(也就是全局對象)另一種還是用導(dǎo)航函數(shù)傳:

//NavigatetothenewpageNavigationService.Navigate(new

Uri("/DetailsPage.xaml?selectedItem="+(MainLongListSelector.SelectedItemas

ItemViewModel).ID,UriKind.Relative));2023/1/17Microsoftconfidential52處理非線性導(dǎo)航要細(xì)心設(shè)計(jì)程序的導(dǎo)航策略如果從“第三頁”跳轉(zhuǎn)到“首頁”,然后再點(diǎn)擊物理后退按鈕,會發(fā)生什么?用戶想退出程序,可是程序卻回到了“第三頁”其實(shí)可以用NavigationService.RemoveBackEntry()來清除后退棧。532023/1/17Microsoftconfidential53NavigationService.RemoveBackEntry()當(dāng)“第三頁”跳轉(zhuǎn)到“首頁”,在導(dǎo)航的參數(shù)中加一個(gè)傳遞參數(shù):

在“首頁”的OnNavigatedTo事件中,檢測是否有這個(gè)傳遞參數(shù),如果有的話,移除"第三頁"和"第二頁"的導(dǎo)航棧位置。54

NavigationService.Navigate(new

Uri("/MainPage.xaml?homeFromThird=true",UriKind.Relative));

protected

override

voidOnNavigatedTo(NavigationEventArgse)

{

if(e.NavigationMode==System.Windows.Navigation.NavigationMode.New

&&NavigationContext.QueryString.ContainsKey("homeFromThird"))

{

NavigationService.RemoveBackEntry();//RemoveThirdPage

NavigationService.RemoveBackEntry();//RemoveSecondPage

NavigationService.RemoveBackEntry();//RemoveoriginalMainPage

}

base.OnNavigatedTo(e);

}2023/1/17Microsoftconfidential54Demo:PageNavigation552023/1/17MicrosoftconfidentialApplicationBar2023/1/17Microsoftconfidential系統(tǒng)托盤包括一些系統(tǒng)自帶的指示符顯示系統(tǒng)狀態(tài)(如信號,聲音,日期),可以通過Microsoft.Phone.Shell.SystemTray.IsVisible=false;顯示或隱藏ApplicationBar可以顯示一些按鈕或常用的菜單。

系統(tǒng)托盤和ApplicationBar2023/1/17Microsoftconfidential57用ApplicationBar替代一些自定義右鍵菜單。最多4個(gè)按鈕。除非必須,別放滿4個(gè)上滑ApplicationBar帶出更多菜單。圖標(biāo)應(yīng)該用白色的前景色放在透明的背景上。ApplicationBar2023/1/17Microsoftconfidential58ApplicationBarinXaml59<phone:PhoneApplicationPage

x:Class="CRMapp.MainPage“

…>

<phone:PhoneApplicationPage.ApplicationBar>

<shell:ApplicationBarx:Name="AppBar"Opacity="1.0"IsMenuEnabled="True">

<shell:ApplicationBar.Buttons>

<shell:ApplicationBarIconButtonx:Name="NewContactButton"IconUri="Images/appbar.new.rest.png"

Text="New"Click="NewContactButton_Click"/>

<shell:ApplicationBarIconButtonx:Name="SearchButton"IconUri="Images/appbar.feature.search.rest.png"

Text="Find"Click="SearchButton_Click"/>

</shell:ApplicationBar.Buttons>

<shell:ApplicationBar.MenuItems>

<shell:ApplicationBarMenuItemx:Name="GenerateMenuItem"Text="GenerateData"

Click="GenerateMenuItem_Click"/>

<shell:ApplicationBarMenuItemx:Name="ClearMenuItem"Text="ClearData"

Click="ClearMenuItem_Click"/>

</shell:ApplicationBar.MenuItems>

</shell:ApplicationBar>

</phone:PhoneApplicationPage.ApplicationBar></phone:PhoneApplicationPage>2023/1/17Microsoftconfidential59ApplicationBar屏幕橫豎向橫向時(shí)ApplicationBar在側(cè)邊切換方向時(shí)系統(tǒng)自帶動(dòng)畫處理過渡2023/1/17Microsoftconfidential60如果透明度小于1,頁面大小會撐滿屏幕,ApplicationBar會覆蓋頁面如果透明度等于1,頁面大小會撐到ApplicationBar,ApplicationBar則不會覆蓋頁面。ApplicationBar的透明度612023/1/17Microsoftconfidential61在Blend中設(shè)計(jì)ApplicationBar2023/1/17Microsoftconfidential62Demo7:Designing

anApplicationBar632023/1/17Microsoftconfidential動(dòng)態(tài)更改屏幕方向2023/1/17Microsoftconfidential手機(jī)UI方向設(shè)計(jì)不是所有的應(yīng)用需要橫向可以通過配置讓應(yīng)用支持橫向或倒向:652023/1/17MicrosoftconfidentialVisualStudio2012中設(shè)計(jì)方向橫向和縱向設(shè)計(jì)視圖2023/1/17Microsoftconfidential66選擇方向67SupportedOrientations="Portrait"SupportedOrientations="PortraitOrLandscape"2023/1/17Microsoftconfidential相應(yīng)的布局也許需要調(diào)整2023/1/17Microsoftconfidential68LayoutunalteredLayoutoptimisedforlandscape用Grid做橫向布局第二列是在豎向時(shí)沒有用到的69

<phone:PivotItemHeader="recipe">

<Grid>

<Grid.ColumnDefinitions><ColumnDefinitionWidth="*"/><ColumnDefinitionWidth="Auto"/>

</Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinitionHeight="Auto"/>

<RowDefinitionHeight="240"/><RowDefinitionHeight="*"/><RowDefinitionHeight="Auto"/>

</Grid.RowDefinitions>...</Grid>Row0Row1Row2Row3Column02023/1/17Microsoftconfidential移動(dòng)元素橫向布局將菜譜的描述移動(dòng)到第二行第二列,現(xiàn)在第三行沒有用到了。因?yàn)樾懈呤?,其自動(dòng)收縮為0.70

<phone:PivotItemHeader="recipe">

<Grid>

<Grid.ColumnDefinitions><ColumnDefinitionWidth="*"/><ColumnDefinitionWidth="Auto"/>

</Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinitionHeight="Auto"/>

<RowDefinitionHeight="240"/><RowDefinitionHeight="*"/><RowDefinitionHeight="Auto"/>

</Grid.RowDefinitions>...</Grid>Row0Row1Row2Row3Column0Column12023/1/17Microsoftconfidential移動(dòng)元素private

voidPhoneApplicationPage_OrientationChanged(objectsender,OrientationChangedEventArgse){

if(this.Orientation==PageOrientation.LandscapeLeft||this.Orientation==

PageOrientation.LandscapeRight)

{

DirectionsScrollViewer.SetValue(Grid.RowProperty,1);

DirectionsScrollViewer.SetValue(Grid.ColumnProperty,1);

}

else

{

DirectionsScrollViewer.SetValue(Grid.RowProperty,2);

DirectionsScrollViewer.SetValue(Grid.ColumnProperty,0);

}

}2023/1/17Microsoftconfidential71Demo

8:

OrientationSupport2023/1/17MicrosoftconfidentialWindowsPhoneToolkit2023/1/17MicrosoftconfidentialWindowsPhoneToolkit原來叫SilverlightToolkit主要是擴(kuò)充官方控件集里沒有的功能開源,每3個(gè)月更新一次。?742023/1/17Microsoftconfidential74如何獲取WindowsPhoneToolkit獲取示例和源代碼非微軟!--添加引用通過NuGet2023/1/17Microsoftconfidential75NuGetNET下的依賴庫整理系統(tǒng)開源第三方可以在VisualStudio2012中通過Nuget獲得WindowsPhoneToolkit2023/1/17Microsoftconfidential76WindowsPhoneToolkit中的控件2023/1/17Microsoftconfidential上下文菜單2023/1/17Microsoftconfidential78時(shí)間和日期選擇器792023/1/17Microsoftconfidential79狀態(tài)切換器:802023/1/17Microsoftconfidential80WrapPanel812023/1/17Microsoftconfidential81ListPicker2023/1/17Microsoftconfidential82更多MessageBoxRatingcontrolpleteBoxExpanderViewHubTile下載,2023/1/17Microsoftconfidential83頁面過渡效果2023/1/17Microsoftconfidential頁面過渡包括Roll,Swivel,Rotate,SlideandTurnstile等方式??梢杂胻oolkit中的TransitionFrame替代自帶的PhoneApplicationFrame開始在App.xaml.cs里設(shè)置InitializePhoneApplication()函數(shù)。2023/1/17Microsoftconfidential85在Page上允許過渡效果:聲明toolkit的引用:在<Phone:PhoneApplicationPage>的根元素下,添加效果:2023/1/17Microsoftconfidential86傾斜效果1,為控件的交互添加附加的視覺回饋。2,替換原始自帶的簡單的Pressed,UnPressed狀態(tài)。3,在頁面上為所有控件“開啟”傾斜效果:4,也可以只應(yīng)用到單個(gè)控件:2023/1/17Microsoftconfidential87Demo9:

PageTransitions

andTileEffect882023/1/17Microsoftconfidential數(shù)據(jù)綁定2023/1/17Microsoftconfidential數(shù)據(jù)綁定設(shè)置UI最簡單的方式是通過設(shè)置控件的屬性:

e.g.,textBox1.Text="Hello,world";在復(fù)雜的應(yīng)用中,這樣的代碼就變得笨重且容易出錯(cuò)了??梢杂肵aml的數(shù)據(jù)綁定連接到數(shù)據(jù)類,數(shù)據(jù)類是數(shù)據(jù)綁定的源,叫做ViewModel。UI控件可以自動(dòng)地從ViewModel得到它們需要的值。改變ViewModel里的屬性,顯示會變。用戶輸入值,ViewModel里的屬性也會變2023/1/17Microsoftconfidential90在XAML中綁定數(shù)據(jù)控件的屬性可以綁定到數(shù)據(jù)對象的Public屬性上。上例中TextBlock的Text屬性綁定到數(shù)據(jù)源的Directions屬性上。可以通過以下兩種方式設(shè)置數(shù)據(jù)源:給任何從FrameworkElement派生的類設(shè)置DataContext屬性給List(可迭代的)控件設(shè)置ItemSources屬性<TextBlockx:Name="DirectionsTextBlock"TextWrapping="Wrap"

Margin="12,0,0,0"Text="{BindingDirections}"/>2023/1/17Microsoftconfidential91綁定模式Binding的Mode屬性決定了如何在數(shù)據(jù)源和控件之間同步改變OneTime–控件的屬性值只能被設(shè)置一次,其他的修改都被忽略O(shè)neWay–數(shù)據(jù)源的改變能影響到控件,但反過來不會TwoWay–數(shù)據(jù)源的改變能影響到控件,反之亦然

<TextBlockx:Name="DirectionsTextBlock"TextWrapping="Wrap"

Margin="12,0,0,0"Text="{BindingDirections,Mode=OneWay}"/>2023/1/17Microsoftconfidential92INotifyPropertyChanged數(shù)據(jù)源如果是OneWay或TwoWay綁定模式的話,必須實(shí)現(xiàn)INotifyPropertyChanged接口這個(gè)接口只有一個(gè)事件PropertyChanged需要實(shí)現(xiàn)當(dāng)數(shù)據(jù)對象的某個(gè)屬性值改變時(shí),必須觸發(fā)PropertyChanged事件XAML在運(yùn)行時(shí)訂閱這個(gè)事件來更新UI元素的顯示數(shù)據(jù)public

class

ItemViewModel:INotifyPropertyChanged{

public

event

PropertyChangedEventHandlerPropertyChanged;…}2023/1/17Microsoftconfidential93ViewModel在WindowsPhone7.1中的實(shí)現(xiàn)因?yàn)镸agicStrings的原因,老式風(fēng)格的實(shí)現(xiàn)容易出錯(cuò)

public

class

ItemViewModel:INotifyPropertyChanged{

private

string_id;///SampleViewModelproperty;thispropertyisusedtoidentifytheobject.public

stringID{

get{return_id;}

set{

if(value!=_id){_id=value;NotifyPropertyChanged("ID");}}}

public

event

PropertyChangedEventHandlerPropertyChanged;

private

voidNotifyPropertyChanged(StringpropertyName){

PropertyChangedEventHandlerhandler=PropertyChanged;

if(null!=handler){handler(this,new

PropertyChangedEventArgs(propertyName));}}}2023/1/17Microsoftconfidential94ViewModelImplementationinWindowsPhone8.0新的風(fēng)格:CallerMemberName特性:

public

class

ItemViewModel:INotifyPropertyChanged{

private

string_id;public

stringID{

get{return_id;}

set{this.SetProperty(ref

this._id,value);}}

public

event

PropertyChangedEventHandlerPropertyChanged;

protected

boolSetProperty<T>(refTstorage,Tvalue,[CallerMemberName]StringpropertyName=null){

if(object.Equals(storage,value))return

false;storage=value;

this.OnPropertyChanged(propertyName);

return

true;}

protected

voidOnPropertyChanged([CallerMemberName]stringpropertyName=null){

vareventHandler=this.PropertyChanged;

if(eventHandler!=null)eventHandler(this,new

PropertyChangedEventArgs(propertyName));}}2023/1/17Microsoftconfidential95綁定到列表通過設(shè)置ItemsSource屬性,可以將列表控件可以綁定到集合,對于OneWay或TwoWay模式,必須實(shí)現(xiàn)ObservableCollection,且ObservableCollection中的項(xiàng)必須實(shí)現(xiàn)INotifyPropertyChanged接口。

<ListBoxx:Name="IngredientsLIstBox"

ItemTemplate="{StaticResourceStringTemplate}"

ItemsSource="{BindingIngredients}"/>2023/1/17Microsoftconfidential96ObservableCollections97

///

<summary>///AcollectionforItemViewModelobjects.

///

</summary>

public

ObservableCollection<ItemViewModel>Items{get;private

set;}public

voidLoadData(){this.Items.Add(new

ItemViewModel(){ID="0",LineOne="runtimeone",LineTwo=...});

this.Items.Add(new

ItemViewModel(){ID="1",LineOne="runtimetwo",LineTwo=...});

this.Items.Add(new

ItemViewModel(){ID="2",LineOne="runtimethree",LineTwo=...});}2023/1/17Microsoftconfidential97MVVMMVVM=Model-View-ViewModel,是一種架構(gòu)模式Model,暴露數(shù)據(jù),從本地存儲或遠(yuǎn)程存儲獲取數(shù)據(jù)。ViewModel,綁定數(shù)據(jù)到View。View,實(shí)現(xiàn)表現(xiàn)層,顯示數(shù)據(jù)并接收用戶的輸入,View不應(yīng)該包含業(yè)務(wù)邏輯。更多介紹:(v=vs.92).aspx

MVVMLight框架:

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論