Windows 8 設定合約提供統一的應用程式設定進入點(Win+I)。本實驗示範:在設定窗格加入「關於」與「偏好設定」命令、使用 Callisto 控制項庫的 SettingsFlyout 顯示內容、以漫遊設定同步使用者偏好、實作「記住上次位置」功能。
App.xaml.cs 註冊 SettingsPane.CommandsRequested:SettingsPane.GetForCurrentView().CommandsRequested += OnCommandsRequested;
void OnCommandsRequested(SettingsPane sender, SettingsPaneCommandsRequestedEventArgs args)
{
var about = new SettingsCommand("about", "About", handler => {
var flyout = new SettingsFlyout {
Content = new AboutUserControl(),
HeaderBrush = new SolidColorBrush(_background),
Background = new SolidColorBrush(_background),
HeaderText = "About",
IsOpen = true
};
});
args.Request.ApplicationCommands.Add(about);
}
AboutUserControl.xaml:<StackPanel>
<TextBlock Text="Contoso Cookbook" FontSize="26.667" FontWeight="SemiLight"/>
<TextBlock Text="Trial Version" FontSize="18" FontWeight="SemiLight"/>
</StackPanel>
OnCommandsRequested 加入 Preferences 命令,內容為 PreferencesUserControl。PreferencesUserControl.xaml:<ToggleSwitch x:Name="Remember" Header="Remember where I was" Toggled="OnToggled"/>
private void OnToggled(object sender, RoutedEventArgs e)
{
ApplicationData.Current.RoamingSettings.Values["Remember"] = Remember.IsOn;
}
if (ApplicationData.Current.RoamingSettings.Values.ContainsKey("Remember"))
Remember.IsOn = (bool)ApplicationData.Current.RoamingSettings.Values["Remember"];
Visual Studio 範本內建 SuspensionManager 處理暫停/終止時的導航狀態保存與還原。我們在 OnLaunched 依使用者偏好決定是否還原:
if (args.PreviousExecutionState == ApplicationExecutionState.ClosedByUser)
{
if (ApplicationData.Current.RoamingSettings.Values.ContainsKey("Remember"))
{
bool remember = (bool)ApplicationData.Current.RoamingSettings.Values["Remember"];
if (remember) await SuspensionManager.RestoreAsync();
}
}
| 概念 | 說明 |
|---|---|
SettingsPane | 系統級設定容器,應用程式透過 CommandsRequested 加入命令 |
SettingsFlyout | Callisto 提供的飛出面板,適合顯示設定頁面 |
RoamingSettings | 漫遊設定,自動同步至使用者的其他 Windows 8 裝置(~100KB 配額) |
SuspensionManager | 序列化 Frame 導航堆疊,支援暫停/終止/關閉後還原 |
ApplicationExecutionState.ClosedByUser | 使用者主動關閉(Alt+F4 或下滑),非系統終止 |
RoamingFolder。Microsoft.Toolkit.Uwp.UI.Controls.SettingsCard 或原生 SettingsFlyout (WinUI 3)。