アプリの設定を保存しようとするのはこれが初めてです。toggleSwitch はアプリのテーマを変更し、後でそれを ApplicationDataContainer に保存します。ユーザーがトグルを使用してテーマを変更すると、アプリの再起動時に適用されます。これまでのところ悪い: toggleSwitch は、XAML で言及されていないにもかかわらず、永続的な IsOn="True" モードになっています。その結果、テーマは 2 回目の再起動で元の状態に戻ります。トグルが目的のユーザー位置に留まるようにするには、何を実装する必要がありますか?
XAML
<Page
x:Class="App3.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App3"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<ToggleSwitch OffContent="Light"
OnContent="Dark"
x:Name="toggleSwitch"
Header="ToggleSwitch"
Toggled="toggleSwitch_Toggled"/>
</Grid>
</Page>
CS
using System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.Storage;
namespace App3
{
public sealed partial class MainPage : Page
{ ApplicationDataContainer localSettings = null;
ApplicationDataContainer local = null;
const string toggleSwitch_Toggle = "example";
public MainPage()
{ ApplyUserSettings();
this.InitializeComponent();
localSettings = ApplicationData.Current.LocalSettings;
local = ApplicationData.Current.LocalSettings; }
private async void toggleSwitch_Toggled(object sender, RoutedEventArgs e)
{ StorageFolder local = ApplicationData.Current.LocalFolder;
var dataFolder = await local.CreateFolderAsync("Data Folder", CreationCollisionOption.OpenIfExists);
var file = await dataFolder.CreateFileAsync("SwitchBWThemeMode.txt", CreationCollisionOption.ReplaceExisting);
if (toggleSwitch.IsOn)
{ await FileIO.WriteTextAsync(file, "on"); }
else await FileIO.WriteTextAsync(file, "off"); }
private async void ApplyUserSettings()
{ try
{ StorageFolder local = ApplicationData.Current.LocalFolder;
var dataFolder = await local.GetFolderAsync("Data Folder");
var file = await dataFolder.GetFileAsync("SwitchBWThemeMode.txt");
String SwitchBWThemeMode = await FileIO.ReadTextAsync(file);
if (SwitchBWThemeMode == "on")
{ RequestedTheme = ElementTheme.Dark;
toggleSwitch.IsOn = true; }
else RequestedTheme = ElementTheme.Light;
toggleSwitch.IsOn = false;
}
catch (Exception) { }
}}}