在 Store Apps 上新增 Setting 的支援方式依然不變,但如果是撰寫 Universal Apps 時,就要特別注意 Charms 相關 API 在 Windows Phone 上面是不支援的,必須使用 #if WINDOWS_APP 將程式碼包起來,以下示範如何在 Shared Project 中為應用程式加入設定,我在 App.xaml.cs 中 override OnWindowsCreated 並加入 SettingsPane 的支援,注意因為是寫在 Shared Project 中,所以大多數的程式碼都被包起來以避免編譯器回報 Error。
此處我僅附上加入到 App class 內的程式碼,原先 App class 內的程式碼未列出來的皆不需修改
public sealed partial class App : Application
{
public App()
{
this.InitializeComponent();
this.Suspending += this.OnSuspending;
}
protected override void OnWindowCreated(WindowCreatedEventArgs args)
{
base.OnWindowCreated(args);
#if WINDOWS_APP
SettingsPane.GetForCurrentView().CommandsRequested += OnCommandsRequested;
#endif
}
#if WINDOWS_APP
private void OnCommandsRequested(SettingsPane sender, SettingsPaneCommandsRequestedEventArgs args)
{
UICommandInvokedHandler handler = new UICommandInvokedHandler(OnSettingsCommand);
SettingsCommand command1 = new SettingsCommand("setting1", "Setting 1", handler);
args.Request.ApplicationCommands.Add(command1);
SettingsCommand command2 = new SettingsCommand("setting2", "Setting 2", handler);
args.Request.ApplicationCommands.Add(command2);
SettingsCommand command3 = new SettingsCommand("setting3", "Setting 3", handler);
args.Request.ApplicationCommands.Add(command3);
SettingsCommand command4 = new SettingsCommand("setting4", "Setting 4", handler);
args.Request.ApplicationCommands.Add(command4);
SettingsCommand command5 = new SettingsCommand("setting5", "Setting 5", handler);
args.Request.ApplicationCommands.Add(command5);
SettingsCommand command6 = new SettingsCommand("setting6", "Setting 6", handler);
args.Request.ApplicationCommands.Add(command6);
SettingsCommand command7 = new SettingsCommand("setting7", "Setting 7", handler);
args.Request.ApplicationCommands.Add(command7);
SettingsCommand command8 = new SettingsCommand("setting8", "Setting 8", handler);
args.Request.ApplicationCommands.Add(command8);
try
{
SettingsCommand command9 = new SettingsCommand("setting9", "Setting 9", handler);
args.Request.ApplicationCommands.Add(command9);
}
catch (Exception)
{
}
}
private void OnSettingsCommand(IUICommand command)
{
SettingsCommand settingsCommand = (SettingsCommand)command;
Debug.WriteLine(String.Format("Id :: {0}, Label :: {1}", settingsCommand.Id, settingsCommand.Label));
}
#endif
}
以上程式碼可以注意一下,我在加入第 9 個 SettingsCommand 時使用 try cache 將指令包起來,這是因為 SettingsPane 在加入超過 8 個 SettingsCommand 時執行會發生 Exception,所以記得 SettingsPane 上只是放各設定細項的入口,不是所有細節。
同時可以注意到 SettingsPane 上只能加入字串格式的 Command,如果想要像預設會加入的 Permission 一樣可以開啟內含豐富元件的 SettingsPane 時,得在 OnSettingsCommand Function 內自行將 SettingsPane 關掉並顯示一個寬度為 346 個 pixel 的 Control,這方面在 Store App 上製作並不如 Windows 8 時一樣需要自行撰寫全部的動作,可以使用官方所提供的 SettingsFlyout class 來簡易的達成。
沒有留言:
張貼留言