Windows 8 開發之設定合約

來源:互聯網
上載者:User

   合約:合約就像一個或多個程式之間的協議。合約定義了應用程式在與其它程式或Windows 進行互動時必須遵循的一些約定。我們對一個應用的一些設定,常用的可以放到AppBar上面,如果不是很常用的,比如應用程式的佈景主題色彩,可以放到設定合約,也就是通過超級菜單調出來的設定面板上。下面就介紹如何把我們的設定選項添加的設定面板中。

1.引入命名空間:Windows.UI.ApplicationSettings;
2.註冊設定事件

  在程式啟動的時候,App.xaml.cs檔案中有一個名為OnLaunched的方法會被調用。在OnLaunched的開頭,我建立了一個event handler,當使用者開啟SettingsPane時,會被調用。你自訂的設定畫面直到使用者開啟Settings Charm時,才會被載入。當你“暫停”你的程式或者遊戲,如果設定面板被開啟了,那麼這個event也會被調用。

 protected override void OnLaunched(LaunchActivatedEventArgs args)        {            SettingsPane.GetForCurrentView().CommandsRequested += App_CommandsRequested;    //註冊設定事件            Frame rootFrame = Window.Current.Content as Frame;            // 不要在視窗已包含內容時重複應用程式初始化,            // 只需確保視窗處於活動狀態            if (rootFrame == null)            {                // 建立要充當導航內容相關的架構,並導航到第一頁                rootFrame = new Frame();                if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)                {                    //TODO: 從之前掛起的應用程式載入狀態                }                // 將架構放在當前視窗中                Window.Current.Content = rootFrame;            }            if (rootFrame.Content == null)            {                // 當未還原導航堆棧時,導航到第一頁,                // 並通過將所需資訊作為導航參數傳入來配置                // 參數                if (!rootFrame.Navigate(typeof(MainPage), args.Arguments))                {                    throw new Exception("Failed to create initial page");                }            }            // 確保當前視窗處於活動狀態            Window.Current.Activate();        }
        void App_CommandsRequested(SettingsPane sender, SettingsPaneCommandsRequestedEventArgs args)        {            SettingsCommand cmd = new SettingsCommand("關於", "關於應用", (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);        }

  如上代碼所示,我建立了一個SettingsCommand對象,並提供了三個值。除非你需要在程式運行時修改SettingsPane,否則第一個參數值並不太重要。它就是一個簡單ID,隨後可以通過這個ID可以引用到SettingsCommand。標籤“佈景主題色彩”可以是任意的字串,不過我建議不要超過40個字元,否則會被截斷。最後一個參數值是這個command的handler。當使用者輕觸lable 時,會執行該handler。在這裡,我用lambada 運算式來簡化該處理。運算式裡面,我建立了一個Popup控制項,並將其IsOpen 屬性設定為true。改變這個屬性,可以使Popup顯示在螢幕上。

3.  建立Popup控制項
  首先是一個自訂的UserControl,之後我會介紹到該UserControl,現在只需要明白AboutPage.xaml是一個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(如應用程式欄)的邊緣轉換位置。            {                Edge = (SettingsPane.Edge == SettingsEdgeLocation.Right) ?                        EdgeTransitionLocation.Right :                        EdgeTransitionLocation.Left            });//檢查SettingsPane的edge,有些國家的超級菜單在左邊。            element.Width = width;            element.Height = Window.Current.Bounds.Height;                       p.SetValue(Canvas.LeftProperty, SettingsPane.Edge == SettingsEdgeLocation.Right ? (Window.Current.Bounds.Width - width) : 0);//設定距離左邊的邊距            p.SetValue(Canvas.TopProperty, 0);            return p;        }    }

   上面定義了UserControl的高度和寬度,並將element賦值給Popup控制項p。(這裡建議的寬度是346或者646,高度應該是使用者螢幕的完整高度,參考:設計指南)。最後,設定了popup的left 和top 屬性,這樣popup將會出現在適當的位置,然後將p返回給SettingsCommand。 
   註解:Windows 8可以根據機器的本地化設定而有不同的變化。如果有的國家的語言是從右往左讀的,那麼Charms  Bar的實際位置是在螢幕的左邊,而不是右
邊。這就是為什麼我在給popup的LeftProperty賦值時,檢查SettingsPane的“edge”。

4. 建立UserControl
  添加一個新的UserControl項到工程中。為了跟之前的代碼想匹配,我將其命名為AboutPage.xaml。這個檔案中代碼的內容完全取決於你。沒有任何的官方文檔約束。在UserControl中,可以通過在MainPage中定義一個共有欄位public static MainPage Current來訪問MainPage頁面中控制項,實現對頁面裡面控制項的屬性進行修改。

 

 如需原始碼,點擊SettingPanel.zip下載

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.