C# UWP C仅执行切换开关的一个本地设置

C# UWP C仅执行切换开关的一个本地设置,c#,xaml,caching,C#,Xaml,Caching,我在设置页面中使用了4个切换开关。我将这些值保存在本地设置中,这样当用户重新启动应用程序时,设置仍然适用。但是,当我在重新启动页面时选择set to on multiple toggle switches(设置为打开多个切换开关)时,只有第一个位置最高的开关(也是代码中的最高开关)处于打开状态 这是我的代码: .cs .XAML 消息以随机顺序出现,因此我认为这就是问题所在。您可以使用两种不同的方法解决此问题: 通过为每个ToggleSwitch创建自己的ToggledEventHandler。

我在设置页面中使用了4个切换开关。我将这些值保存在本地设置中,这样当用户重新启动应用程序时,设置仍然适用。但是,当我在重新启动页面时选择set to on multiple toggle switches(设置为打开多个切换开关)时,只有第一个位置最高的开关(也是代码中的最高开关)处于打开状态

这是我的代码:

.cs

.XAML


消息以随机顺序出现,因此我认为这就是问题所在。

您可以使用两种不同的方法解决此问题:

通过为每个ToggleSwitch创建自己的ToggledEventHandler。 通过使用布尔字段跟踪构造函数何时完成 现在的问题是,您的构造函数正在调用ToggleSwitch\u Toggled-method。当代码设置toggleSwitchPushNotifications.IsOn时会发生这种情况。此时,您尚未初始化其他切换开关,因此它们的IsOn为false。这将覆盖其当前设置

选择1

因此,在XAML中,为每个ToggleSwitch定义自己的Toggled eventhandler:

    <ToggleSwitch Margin="10,10,10,5" Grid.Row="0" Foreground="White" x:Name="toggleSwitchPushNotifications" Header="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut eu. " HorizontalAlignment="Left" VerticalAlignment="Top" Toggled="ToggleSwitchPushNotifications_OnToggled"/>
    <ToggleSwitch Margin="10,10,10,5" Grid.Row="1" Foreground="White" x:Name="toggleSwitchFullScreen" Header="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut eu. " HorizontalAlignment="Left" VerticalAlignment="Top" Toggled=" ToggleSwitchFullScreen_OnToggled"/>
    <ToggleSwitch Margin="10,10,10,5" Grid.Row="2" Foreground="White" x:Name="toggleSwitchDataCollecting" Header="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut eu. " HorizontalAlignment="Left" VerticalAlignment="Top"  Toggled=" ToggleSwitchDataCollecting_OnToggled"/>
    <ToggleSwitch Margin="10,10,10,5" Grid.Row="3" Foreground="White" x:Name="toggleSwitchTest" Header="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut eu. " HorizontalAlignment="Left" VerticalAlignment="Top"  Toggled="ToggleSwitchTest_OnToggled"/>
选择2

或者,您可以使用布尔变量跳过从构造函数切换的ToggleSwitch_调用:

    private bool initializing = true;
    public MainPage()
    {
        this.InitializeComponent();
        toggleSwitchPushNotifications.IsOn = Convert.ToBoolean(App.localSettings.Values["PushNotifications"]);
        toggleSwitchFullScreen.IsOn = Convert.ToBoolean(App.localSettings.Values["FullScreen"]);
        toggleSwitchDataCollecting.IsOn = Convert.ToBoolean(App.localSettings.Values["DataCollecting"]);
        toggleSwitchTest.IsOn = Convert.ToBoolean(App.localSettings.Values["Test"]);

        initializing = false;
    }

    private void ToggleSwitch_Toggled(object sender, RoutedEventArgs e)
    {
        if (initializing) return;

        App.localSettings.Values["PushNotifications"] = toggleSwitchPushNotifications.IsOn;
        App.localSettings.Values["FullScreen"] = toggleSwitchFullScreen.IsOn;
        App.localSettings.Values["DataCollecting"] = toggleSwitchDataCollecting.IsOn;
        App.localSettings.Values["Test"] = toggleSwitchTest.IsOn;
    }
    toggleSwitchPushNotifications.IsOn = Convert.ToBoolean(App.localSettings.Values["PushNotifications"]);
    MessageDialog msgDialog0 = new MessageDialog("0.");
    msgDialog0.ShowAsync();

    toggleSwitchFullScreen.IsOn = Convert.ToBoolean(App.localSettings.Values["FullScreen"]);
    MessageDialog msgDialog1 = new MessageDialog("1.");
    msgDialog1.ShowAsync();

    toggleSwitchDataCollecting.IsOn = Convert.ToBoolean(App.localSettings.Values["DataCollecting"]);
    MessageDialog msgDialog2 = new MessageDialog("2.");
    msgDialog2.ShowAsync();

    toggleSwitchTest.IsOn = Convert.ToBoolean(App.localSettings.Values["Test"]);
    MessageDialog msgDialog3 = new MessageDialog("3.");
    msgDialog3.ShowAsync();
    <ToggleSwitch Margin="10,10,10,5" Grid.Row="0" Foreground="White" x:Name="toggleSwitchPushNotifications" Header="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut eu. " HorizontalAlignment="Left" VerticalAlignment="Top" Toggled="ToggleSwitchPushNotifications_OnToggled"/>
    <ToggleSwitch Margin="10,10,10,5" Grid.Row="1" Foreground="White" x:Name="toggleSwitchFullScreen" Header="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut eu. " HorizontalAlignment="Left" VerticalAlignment="Top" Toggled=" ToggleSwitchFullScreen_OnToggled"/>
    <ToggleSwitch Margin="10,10,10,5" Grid.Row="2" Foreground="White" x:Name="toggleSwitchDataCollecting" Header="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut eu. " HorizontalAlignment="Left" VerticalAlignment="Top"  Toggled=" ToggleSwitchDataCollecting_OnToggled"/>
    <ToggleSwitch Margin="10,10,10,5" Grid.Row="3" Foreground="White" x:Name="toggleSwitchTest" Header="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut eu. " HorizontalAlignment="Left" VerticalAlignment="Top"  Toggled="ToggleSwitchTest_OnToggled"/>
    public MainPage()
    {
        this.InitializeComponent();
        toggleSwitchPushNotifications.IsOn = Convert.ToBoolean(App.localSettings.Values["PushNotifications"]);
        toggleSwitchFullScreen.IsOn = Convert.ToBoolean(App.localSettings.Values["FullScreen"]);
        toggleSwitchDataCollecting.IsOn = Convert.ToBoolean(App.localSettings.Values["DataCollecting"]);
        toggleSwitchTest.IsOn = Convert.ToBoolean(App.localSettings.Values["Test"]);
    }

    private void ToggleSwitchFullScreen_OnToggled(object sender, RoutedEventArgs e)
    {
        App.localSettings.Values["FullScreen"] = toggleSwitchFullScreen.IsOn;
    }

    private void ToggleSwitchDataCollecting_OnToggled(object sender, RoutedEventArgs e)
    {
        App.localSettings.Values["DataCollecting"] = toggleSwitchDataCollecting.IsOn;
    }

    private void ToggleSwitchTest_OnToggled(object sender, RoutedEventArgs e)
    {
        App.localSettings.Values["Test"] = toggleSwitchTest.IsOn;
    }

    private void ToggleSwitchPushNotifications_OnToggled(object sender, RoutedEventArgs e)
    {
        App.localSettings.Values["PushNotifications"] = toggleSwitchPushNotifications.IsOn;
    }
    private bool initializing = true;
    public MainPage()
    {
        this.InitializeComponent();
        toggleSwitchPushNotifications.IsOn = Convert.ToBoolean(App.localSettings.Values["PushNotifications"]);
        toggleSwitchFullScreen.IsOn = Convert.ToBoolean(App.localSettings.Values["FullScreen"]);
        toggleSwitchDataCollecting.IsOn = Convert.ToBoolean(App.localSettings.Values["DataCollecting"]);
        toggleSwitchTest.IsOn = Convert.ToBoolean(App.localSettings.Values["Test"]);

        initializing = false;
    }

    private void ToggleSwitch_Toggled(object sender, RoutedEventArgs e)
    {
        if (initializing) return;

        App.localSettings.Values["PushNotifications"] = toggleSwitchPushNotifications.IsOn;
        App.localSettings.Values["FullScreen"] = toggleSwitchFullScreen.IsOn;
        App.localSettings.Values["DataCollecting"] = toggleSwitchDataCollecting.IsOn;
        App.localSettings.Values["Test"] = toggleSwitchTest.IsOn;
    }