Windows 8 Developers

Windowsストアアプリ開発とかその他もろもろのブログ。

※参加自由なWindows8開発コミュニティをFacebookグループでやってます。
https://www.facebook.com/groups/win8.developers/

その他、技術情報リンク集を下記にまとめています。
http://windows8-developers.hatenablog.com/entry/2013/02/20/155410


【C#】設定コントラクトの利用

ちょっとコードが長くてわかりにくいですが、設定チャームを利用して、アプリケーションの設定を行う方法を記載します。(コードを記載する場所は、MainPageがわかりやすいと思います)


ここでは、SettingPage.xaml を設定メニューに追加することを前提に記載します。(呼び出し元はMainPage)



MainPage.xaml.csのコード



       
// 設定チャームへの追加を行う
       
void onCommandsRequested(SettingsPane settingsPane,SettingsPaneCommandsRequestedEventArgs eventArgs)
       
{
           
// ハンドラの取得
           
UICommandInvokedHandler settingPageHandler =newUICommandInvokedHandler(onSettingsCommand);

           
// settingPageというIDで設定というメニュー(SettingCommand)を追加します
           
SettingsCommand settingPage =newSettingsCommand("settingPage","設定", settingPageHandler);
            eventArgs
.Request.ApplicationCommands.Add(settingPage);
       
}

       
// ポップアップウィンドウの定義
       
privatePopup popup;

       
// ハンドラから呼び出された時の処理内容
       
void onSettingsCommand(IUICommand command)
       
{
           
SettingsCommand settingsCommand =(SettingsCommand)command;

           
constdouble _settingsWidth =400;// 「SettingPage.xaml」画面の幅の設定
           
constdouble _settingsHeight =768;// 「SettingPage.xaml」画面の高さの設定

            popup
=newPopup();// ポップアップのインスタンス化(空白のポップアップを作る)
            popup
.Closed+=OnPopupClosed;// ポップアップがクローズされた時に呼ばれるメソッドを定義
           
Window.Current.Activated+=OnWindowActivated;  // ウィンドウがアクティブになった時に実行されるメソッドを定義

            popup
.IsLightDismissEnabled=true;// 簡易非表示の設定を有効化(アプリが別操作をした際に非表示になる)
            popup
.Width= _settingsWidth;// ポップアップウィンドウの幅の設定
            popup
.Height= _settingsHeight;// ポップアップウィンドウの高さの設定

           
SettingPage settingPage =newSettingPage();// 「設定」のページのインスタンス
            settingPage
.Width= _settingsWidth;// 「設定」のページの幅を設定
            settingPage
.Height= _windowBounds.Height;// 「設定」のページ高さを設定
            settingPage
.setCallPage(this);  // 後ほど説明

           
// ポップアップの中に「設定」のページを設定(こうすることで、呼び出し元画面が表示されたままで設定画面が表示される)
            popup
.Child= settingPage;

           
// 左からの位置指定(設定画面の幅が400、画面全体解像度が1366なので 966の位置が丁度よくなる)
           
// 画面サイズによって位置を調整するにはウィンドウのサイズを取得してから減算したほうがよいです
            popup
.SetValue(Canvas.LeftProperty,966);
            popup
.SetValue(Canvas.TopProperty,0);// 上からの位置指定
            popup
.IsOpen=true;// ポップアップをオープンする
       
}

       
// アクティブ時の処理内容
       
privatevoidOnWindowActivated(object sender,Windows.UI.Core.WindowActivatedEventArgs e)
       
{
           
// アクティブ時の処理を記述します。(今回は特に何も処理しません)
       
}

       
// ポップアップを閉じた時の処理内容
       
voidOnPopupClosed(object sender,object e)
       
{
           
// アクティブ時に実行されるメソッドを削除
           
Window.Current.Activated-=OnWindowActivated;
       
}



SettingPage.xaml.cs のコード



       
// 設定画面のバックボタンを押下した時の処理
       
privatevoid onBackClicked(object sender,RoutedEventArgs e)
       
{
           
// 設定画面の親(Popup)を閉じる
           
Popup parent =this.ParentasPopup;
           
if(parent !=null)
           
{
                parent
.IsOpen=false;
           
}
       
}



設定画面(SettingPage)で設定を変更して、呼び出し元(MainPage)へ反映させるには、MainPageをSettingPageに渡して

SettingPageからMainPageのメソッドを呼び出すような仕組みがよいのではないかと思います。



SettingPageのコード



       
// MainPageを受け取る
       
MainPage _mainPage;
       
publicvoid setCallPage(MainPage page)
       
{
            _mainPage
= page;
       
}

       
// 設定画面で何か設定変更をした場合の処理
       
privatevoid onClickHoge(object sender,RoutedEventArgs e)
       
{
           
// MainPageの処理
            _mainPage
.hogehoge(data);
       
}



MainPageのコード(SettingPageから呼び出されるメソッド)



       
publicvoid hogehoge(string data)
       
{
          textData
.Text= data;
       
}

これであなたも設定マスター。