がりらぼ

WindowsRuntimeの応援ブログ

アプリ設定を追加する

Windowsストアアプリの設定画面は独自で用意してもいいのですが、チャームの設定に追加してやることが理想らしいです。
利用するクラスはSettingsPaneクラスとSettingsCommandクラス

protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            SettingsPane.GetForCurrentView().CommandsRequested += CommandRequested;
            
        }

        private void CommandRequested(SettingsPane settingsPane, SettingsPaneCommandsRequestedEventArgs eventArgs)
        {
            UICommandInvokedHandler handler = new UICommandInvokedHandler(HelpSetting);

            //設定チャームに置くボタンを定義する
            SettingsCommand pryCommand = new SettingsCommand("プライバシーポリシー", "プライバシーポリシー", handler);

//AddなのでNavigateされるたびに増え続けるのでIDが一致しているならAddしない
            if (args.Request.ApplicationCommands.Where(x=>x.Id==pryCommand.Id).Count()==0)
                {
            eventArgs.Request.ApplicationCommands.Add(pryCommand);
}
        }

        private async void HelpSetting(IUICommand c)
        {
            //ここに各設定をタップしたときの処理(今回はMessageDialog)
            MessageDialog dialog = new MessageDialog("設定タップ");
            await dialog.ShowAsync();
        }

これで設定チャームに「プライバシーポリシー」というボタンが追加され、
MessageDialogが出ます。

もっと簡単に書きたい??ラムダ式ならできるよ!!

protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            SettingsPane.GetForCurrentView().CommandsRequested += (s, args) =>
            {
                UICommandInvokedHandler handler = new UICommandInvokedHandler((command) =>
               {
                   MessageDialog dialog = new MessageDialog("ラムダこわい");
                   dialog.ShowAsync();

               });

                SettingsCommand pryCommand = new SettingsCommand("プライバシーポリシー", "プライバシーポリシー", handler);
               if (args.Request.ApplicationCommands.Where(x=>x.Id==pryCommand.Id).Count()==0)
                {
                    args.Request.ApplicationCommands.Add(pryCommand);
                }
            };
        }

あのコードが一つのメソッド内におさまってしまう。ラムダこわい
おまけになぜかラムダ式内はawaitしなくてよい謎

設定に書くことを増やしたいなら
HandleとSettingCommandを増やす

protected override void OnNavigatedTo(NavigationEventArgs e)
        {
             SettingsPane.GetForCurrentView().CommandsRequested += (s, args) =>
            {
                UICommandInvokedHandler handler = new UICommandInvokedHandler((command) =>
               {
                  MessageDialog dialog = new MessageDialog("ラムダこわい");
                   dialog.ShowAsync();

               });

                UICommandInvokedHandler handler2 = new UICommandInvokedHandler((command) =>
                {
                    MessageDialog dialog = new MessageDialog("ラムダこわい");
                    dialog.ShowAsync();

                });
                SettingsCommand pryCommand = new SettingsCommand("プライバシーポリシー", "プライバシーポリシー", handler);
if (args.Request.ApplicationCommands.Where(x=>x.Id==pryCommand.Id).Count()==0)
                {
                    args.Request.ApplicationCommands.Add(pryCommand);
                }
                SettingsCommand otokoCommand = new SettingsCommand("男コマンド", "男コマンド", handler2);
                if (args.Request.ApplicationCommands.Where(x=>x.Id==pryCommand.Id).Count()==0)
                {
                    args.Request.ApplicationCommands.Add(otokoCommand);
                }
                           };
            
        }


ふえた