Windows 8 開發(fā)之設(shè)置合約的介紹

合約:合約就像一個(gè)或多個(gè)程序之間的協(xié)議。合約定義了應(yīng)用程序在與其它程序或Windows 進(jìn)行交互時(shí)必須遵循的一些約定。我們對(duì)一個(gè)應(yīng)用的一些設(shè)置,常用的可以放到AppBar上面,如果不是很常用的,比如應(yīng)用程序的主題顏色,可以放到設(shè)置合約,也就是通過(guò)超級(jí)菜單調(diào)出來(lái)的設(shè)置面板上。下面就介紹如何把我們的設(shè)置選項(xiàng)添加的設(shè)置面板中。
1.引入命名空間:Windows.UI.ApplicationSettings;
2.注冊(cè)設(shè)置事件
在程序啟動(dòng)的時(shí)候,App.xaml.cs文件中有一個(gè)名為OnLaunched的方法會(huì)被調(diào)用。在OnLaunched的開頭,我創(chuàng)建了一個(gè)event handler,當(dāng)用戶打開SettingsPane時(shí),會(huì)被調(diào)用。你自定義的設(shè)置畫面直到用戶打開Settings Charm時(shí),才會(huì)被加載。當(dāng)你“暫停”你的程序或者游戲,如果設(shè)置面板被打開了,那么這個(gè)event也會(huì)被調(diào)用。
protected override void OnLaunched(LaunchActivatedEventArgs args)
{
SettingsPane.GetForCurrentView().CommandsRequested += App_CommandsRequested; //注冊(cè)設(shè)置事件
Frame rootFrame = Window.Current.Content as Frame;</p> <p> // 不要在窗口已包含內(nèi)容時(shí)重復(fù)應(yīng)用程序初始化,
// 只需確保窗口處于活動(dòng)狀態(tài)
if (rootFrame == null)
{
// 創(chuàng)建要充當(dāng)導(dǎo)航上下文的框架,并導(dǎo)航到第一頁(yè)
rootFrame = new Frame();</p> <p> if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
//TODO: 從之前掛起的應(yīng)用程序加載狀態(tài)
}</p> <p> // 將框架放在當(dāng)前窗口中
Window.Current.Content = rootFrame;
}</p> <p> if (rootFrame.Content == null)
{
// 當(dāng)未還原導(dǎo)航堆棧時(shí),導(dǎo)航到第一頁(yè),
// 并通過(guò)將所需信息作為導(dǎo)航參數(shù)傳入來(lái)配置
// 參數(shù)
if (!rootFrame.Navigate(typeof(MainPage), args.Arguments))
{
throw new Exception("Failed to create initial page");
}
}
// 確保當(dāng)前窗口處于活動(dòng)狀態(tài)
Window.Current.Activate();
}
void App_CommandsRequested(SettingsPane sender, SettingsPaneCommandsRequestedEventArgs args)
{
SettingsCommand cmd = new SettingsCommand("關(guān)于", "關(guān)于應(yīng)用", (handle) =>
{
Popup popup = CreatePopup.Create(new AboutPage(),346);
popup.IsOpen = true;
});
SettingsCommand cmd1 = new SettingsCommand("主題", "主題顏色", (handle) =>
{
Popup popup = CreatePopup.Create(new ThemColor(), 346);
popup.IsOpen = true;
});
args.Request.ApplicationCommands.Add(cmd);
args.Request.ApplicationCommands.Add(cmd1);
}
如上代碼所示,我創(chuàng)建了一個(gè)SettingsCommand對(duì)象,并提供了三個(gè)值。除非你需要在程序運(yùn)行時(shí)修改SettingsPane,否則第一個(gè)參數(shù)值并不太重要。它就是一個(gè)簡(jiǎn)單ID,隨后可以通過(guò)這個(gè)ID可以引用到SettingsCommand。標(biāo)簽“主題顏色”可以是任意的字符串,不過(guò)我建議不要超過(guò)40個(gè)字符,否則會(huì)被截?cái)?。最后一個(gè)參數(shù)值是這個(gè)command的handler。當(dāng)用戶輕觸lable 時(shí),會(huì)執(zhí)行該handler。在這里,我用lambada 表達(dá)式來(lái)簡(jiǎn)化該處理。表達(dá)式里面,我創(chuàng)建了一個(gè)Popup控件,并將其IsOpen 屬性設(shè)置為true。改變這個(gè)屬性,可以使Popup顯示在屏幕上。
3. 創(chuàng)建Popup控件
首先是一個(gè)自定義的UserControl,之后我會(huì)介紹到該UserControl,現(xiàn)在只需要明白AboutPage.xaml是一個(gè)UserControl即可,AboutPage.xaml是用于Popup控件中的。
public class CreatePopup
{
public static Popup Create(UserControl element, double width)
{
Popup p = new Popup();
p.Child = element;
p.IsLightDismissEnabled = true;
p.ChildTransitions = new TransitionCollection();
p.ChildTransitions.Add(new PaneThemeTransition() //聲明邊緣 UI(如應(yīng)用程序欄)的邊緣轉(zhuǎn)換位置。
{
Edge = (SettingsPane.Edge == SettingsEdgeLocation.Right) ?
EdgeTransitionLocation.Right :
EdgeTransitionLocation.Left
});//檢查SettingsPane的edge,有些國(guó)家的超級(jí)菜單在左邊。</p> <p> element.Width = width;
element.Height = Window.Current.Bounds.Height;
p.SetValue(Canvas.LeftProperty, SettingsPane.Edge == SettingsEdgeLocation.Right ? (Window.Current.Bounds.Width - width) : 0);//設(shè)置距離左邊的邊距
p.SetValue(Canvas.TopProperty, 0);
return p;
}
}
上面定義了UserControl的高度和寬度,并將element賦值給Popup控件p。(這里建議的寬度是346或者646,高度應(yīng)該是用戶屏幕的完整高度,參考:設(shè)計(jì)指南)。最后,設(shè)置了popup的left 和top 屬性,這樣popup將會(huì)出現(xiàn)在適當(dāng)?shù)奈恢?,然后將p返回給SettingsCommand。
注解:Windows 8可以根據(jù)機(jī)器的本地化設(shè)置而有不同的變化。如果有的國(guó)家的語(yǔ)言是從右往左讀的,那么Charms Bar的實(shí)際位置是在屏幕的左邊,而不是右
邊。這就是為什么我在給popup的LeftProperty賦值時(shí),檢查SettingsPane的“edge”。
4. 創(chuàng)建UserControl
添加一個(gè)新的UserControl項(xiàng)到工程中。為了跟之前的代碼想匹配,我將其命名為AboutPage.xaml。這個(gè)文件中代碼的內(nèi)容完全取決于你。沒(méi)有任何的官方文檔約束。在UserControl中,可以通過(guò)在MainPage中定義一個(gè)共有字段public static MainPage Current來(lái)訪問(wèn)MainPage頁(yè)面中控件,實(shí)現(xiàn)對(duì)頁(yè)面里面控件的屬性進(jìn)行修改。
如需源代碼,點(diǎn)擊SettingPanel_jb51net.zip下載
相關(guān)文章
Win8.1 KB5021294補(bǔ)丁月度更新匯總!(附完整更新日志)
微軟已向用戶發(fā)布了Win8.1月度更新匯總,補(bǔ)丁為KB5021294,下文為大家?guī)?lái)了詳細(xì)的更新介紹,需要的朋友一起看看吧2022-12-15微軟警告:Win8.1系統(tǒng)即將停止支持,將很快彈窗提醒,建議購(gòu)買 Win11/1
6月24日消息,據(jù)報(bào)道,微軟正準(zhǔn)備開展行動(dòng),通知Windows8.1用戶關(guān)于該產(chǎn)品的停止支持日期,下面隨小編一起來(lái)看看吧2022-06-24win8系統(tǒng)怎么加密文件?win8系統(tǒng)加密文件詳細(xì)操作方法
這篇文章主要介紹了win8系統(tǒng)怎么加密文件?win8系統(tǒng)加密文件詳細(xì)操作方法的相關(guān)資料,需要的朋友可以參考下本文詳細(xì)內(nèi)容介紹2022-06-13win8系統(tǒng)如何設(shè)置開機(jī)密碼?Win8系統(tǒng)設(shè)置開機(jī)密碼操作教程
這篇文章主要介紹了win8系統(tǒng)如何設(shè)置開機(jī)密碼?Win8系統(tǒng)設(shè)置開機(jī)密碼操作教程的相關(guān)資料,需要的朋友可以參考下本文詳細(xì)內(nèi)容介紹2022-06-13Win8系統(tǒng)在后臺(tái)運(yùn)行打印機(jī)程序操作教程
這篇文章主要介紹了Win8系統(tǒng)在后臺(tái)運(yùn)行打印機(jī)程序操作教程的相關(guān)資料,需要的朋友可以參考下本文詳細(xì)內(nèi)容介紹2022-06-13Win8系統(tǒng)安全證書過(guò)期怎么辦?Win8系統(tǒng)安全證書過(guò)期的解決方法
這篇文章主要介紹了Win8系統(tǒng)安全證書過(guò)期怎么辦?Win8系統(tǒng)安全證書過(guò)期的解決方法的相關(guān)資料,需要的朋友可以參考下本文詳細(xì)內(nèi)容介紹2022-06-13win8系統(tǒng)還原怎么操作呢?win8電腦系統(tǒng)還原詳細(xì)步驟
如何解決Win10瀏覽器打不開網(wǎng)頁(yè)但能上網(wǎng)?最近很多用戶向小編反應(yīng)升級(jí)了win10系統(tǒng)之后在下載軟件或者打開第三方網(wǎng)頁(yè)的時(shí)候會(huì)出現(xiàn)病毒誤報(bào),該怎么辦呢?跟隨小編來(lái)看看吧2020-12-31- Win8臨時(shí)文件夾如何修改路徑?Win8臨時(shí)文件夾文件過(guò)多會(huì)影響速度,我們可以通過(guò)修改文件路徑很好的解決這一問(wèn)題,下面讓我們來(lái)看看如何修改2020-12-22
Win8系統(tǒng)如何設(shè)置鼠標(biāo)左右鍵互換?
Win8系統(tǒng)如何設(shè)置鼠標(biāo)左右鍵互換?最近很多小伙伴向小編咨詢關(guān)于Win8系統(tǒng)設(shè)置鼠標(biāo)左右鍵互換的問(wèn)題,下面就跟隨小編一起學(xué)習(xí)吧2020-12-11Win8系統(tǒng)怎么關(guān)閉系統(tǒng)還原?
Win8系統(tǒng)怎么關(guān)閉系統(tǒng)還原?最近很多win8系統(tǒng)的用戶向小編咨詢想要關(guān)閉系統(tǒng)還原,不知道如何操作,不妨我們一起來(lái)看看下文的教程吧2020-12-09