3

我目前正在尝试将复选框的状态(选中/未选中)保存到我的 Modern 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;

    }

就像我已经说过的那样,我尝试了几种方法来解决这个问题,但没有一个能够真正拯救这两种状态,只有一种(我希望你们中的一些人可能知道为什么,因为我是如此暂时丢失)。

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

4

2 回答 2

2

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

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";
    }
}

然后,您可以使用您之前定义的处理程序(但请注意细微的变化 - 您无需检查复选框的值,但可以直接分配设置。)

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;
} 
于 2012-12-31T10:34:26.617 回答
1
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"];
}
于 2012-12-30T11:49:16.507 回答