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