がりらぼ

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が出ます。
f:id:garicchi:20120911223113p:image
f:id:garicchi:20120911223114p:image

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

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);

}

};

}


f:id:garicchi:20120911223115p:image
ふえた