




下載本文檔
版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 房地產(chǎn)企業(yè)財(cái)務(wù)戰(zhàn)略研究與實(shí)施
- 醫(yī)?;饘艄芾磙k法
- 銷售團(tuán)隊(duì)激勵(lì)機(jī)制探索與實(shí)踐
- 河南財(cái)務(wù)票據(jù)管理辦法
- 景區(qū)植被養(yǎng)護(hù)管理辦法
- 利用改進(jìn)的蜣螂優(yōu)化算法結(jié)合深度學(xué)習(xí)技術(shù)進(jìn)行高壓斷路器故障診斷的研究
- 服務(wù)設(shè)計(jì)思維在茶飲體驗(yàn)系統(tǒng)中的應(yīng)用研究
- 體育機(jī)構(gòu)薪酬管理辦法
- 高壓電力系統(tǒng)保護(hù)技術(shù)研究
- 江西房產(chǎn)抵押管理辦法
- 淹溺診療規(guī)范內(nèi)科學(xué)診療規(guī)范診療指南2023版
- PremiereProCC視頻剪輯基礎(chǔ)教程PPT完整版全套教學(xué)課件
- 新教材北師大版高中英語選擇性必修第一冊全冊各單元學(xué)案(單詞短語句型寫作等知識點(diǎn)匯總)
- 鍍鋅板國家新標(biāo)準(zhǔn)規(guī)定
- 《電工學(xué)》“課程思政”教學(xué)設(shè)計(jì)案例
- 數(shù)字時(shí)代的商務(wù)英語寫作知到章節(jié)答案智慧樹2023年對外經(jīng)濟(jì)貿(mào)易大學(xué)
- 檢驗(yàn)科溝通技巧及其它
- 2022年安徽大學(xué)科研助理(校聘)招聘60人筆試備考題庫及答案解析
- 四年級閱讀訓(xùn)練概括文章主要內(nèi)容(完美)
- YY/T 0995-2015人類輔助生殖技術(shù)用醫(yī)療器械術(shù)語和定義
- GB/T 19352.1-2003熱噴涂熱噴涂結(jié)構(gòu)的質(zhì)量要求第1部分:選擇和使用指南
評論
0/150
提交評論