C# 将复选框状态保存到本地设置,windows 8

C# 将复选框状态保存到本地设置,windows 8,c#,windows-8,microsoft-metro,C#,Windows 8,Microsoft Metro,我当前正在尝试将复选框(选中/未选中)的状态保存到我的现代UI应用程序的ApplicationData的LocalSettings。在过去的6-7个小时里,我一直在研究这个问题,尝试了很多不同的方法,但我相信我现在完全迷失在自己的代码中了。到目前为止,我的代码是: void MainPage_Loaded(object sender, RoutedEventArgs e) { if (localSettings.Values.ContainsKey("isFirs

我当前正在尝试将复选框(选中/未选中)的状态保存到我的现代UI应用程序的ApplicationData的LocalSettings。在过去的6-7个小时里,我一直在研究这个问题,尝试了很多不同的方法,但我相信我现在完全迷失在自己的代码中了。到目前为止,我的代码是:

    void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        if (localSettings.Values.ContainsKey("isFirstChecked") == false || cbFirst.IsChecked == false)
        {
            cbFirst.IsChecked = false;
            test.Text = "UnChecked";
        }
        else 
        {
            cbFirst.IsChecked = true;
            test.Text = "Checked";
        }
    }

    private void cbFirst_Checked(object sender, RoutedEventArgs e)
    {
        test.Text = "Checked";
        localSettings.Values["isFirstChecked"] = cbFirst.IsChecked = true;
    }

    private void cbFirst_Unchecked(object sender, RoutedEventArgs e)
    {
        test.Text = "UnChecked";
        var test2 = localSettings.Values["isFirstChecked"] = cbFirst.IsChecked = false;

    }
正如我已经说过的,我已经尝试了几种方法来解决这个问题,但没有一种方法能够真正拯救这两个州,只有一个州(我希望你们中的一些人知道为什么,因为我现在很迷茫)


出于某种原因,当我调试时,即使复选框未选中,也会触发“已选中”代码。

初始代码的问题在于,您在自己的条件下检查了不同的内容。您正在检查存储的设置是否存在,然后检查是否选中该复选框。您当前没有做的是获取设置值(如果存在)。在加载时尝试以下操作

private void cbFirstCheckedChanged(object sender, EventArgs e)
{
    var checkBox = serder as CheckBox;
    if (checkBox == null) return;
    test.Text = checkBox.IsChecked ? "Checked" : "UnChecked";
    localSettings.Values["isFirstChecked"] = cbFirst.IsChecked
}

void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    checkBox.IsChecked = localSettings.Values["isFirstChecked"];
}
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    bool valueFromSettings = false;

    if (!localSettings.Values.ContainsKey("isFirstChecked"))
    {
        // if the setting doesn't exist, probably wise to create it here.
        // setting the default to "false", but you can change to true if that makes more sense.
        localSettings.Values.Add("isFirstChecked", false);
    }
    else
    {
        // read the value of the setting here.  
        // If we just created it, it should default to false (see above)
        valueFromSetting = ((bool)localSettings.Values["isFirstChecked"]);
    }

    if(valueFromSettings)
    {
        cbFirst.IsChecked = true;
        test.Text = "Checked";
    }
    else 
    {
        cbFirst.IsChecked = false;
        test.Text = "UnChecked";
    }
}
然后,您可以使用之前定义的处理程序(但请注意细微的更改-您不需要检查复选框的值,但可以直接指定设置)


谢谢你的代码!现在,我主要关心的是主页加载的代码。即使我取消选中复选框并重新启动应用程序,它仍然不会在启动时显示“未选中”。我只是在主页代码中更改为:
localSettings.Values.ContainsKey(“isFirstChecked”)==false
,在XAML中更改为:
。如果将主页中加载的代码更改为
If(localSettings.Values.ContainsKey(“isFirstChecked”)==false)
,那么在创建isFirstChecked之后,您将始终得到取消选中的结果。您所做的只是检查该属性是否存在,然后执行该操作,而不是检查它的实际值。@Andrkall,您有什么建议吗?我也尝试过
if(localSettings.Values.ContainsKey(“isTwitterFirstChecked”)==true | | cbTwitterFirst.IsChecked==true)
,但没有(肯定的)结果..像我希望的那样工作。好的,所以我相信我理解了为什么我以前的代码不起作用,而这是可行的。非常感谢:)
private void cbFirst_Checked(object sender, RoutedEventArgs e)
{
    test.Text = "Checked";
    localSettings.Values["isFirstChecked"] = true;
}

private void cbFirst_Unchecked(object sender, RoutedEventArgs e)
{
    test.Text = "UnChecked";
    localSettings.Values["isFirstChecked"] = false;
}