C# 使用WPF时,如何将选中的属性状态保存到Properties.Settings?

C# 使用WPF时,如何将选中的属性状态保存到Properties.Settings?,c#,wpf,visual-studio-2010,C#,Wpf,Visual Studio 2010,我正在将一个程序从WinForms转换为WPF。似乎有很多不必要的语法更改。但我遇到的问题是将“选中”或“未选中”状态保存到Properties.Settings。在WinForms中,我使用了: private void chkBackup_CheckedChanged(object sender, EventArgs e) { Properties.Settings.Default.Backup = chkBackup.Checked; Pro

我正在将一个程序从WinForms转换为WPF。似乎有很多不必要的语法更改。但我遇到的问题是将“选中”或“未选中”状态保存到Properties.Settings。在WinForms中,我使用了:

    private void chkBackup_CheckedChanged(object sender, EventArgs e)
    {
        Properties.Settings.Default.Backup = chkBackup.Checked;
        Properties.Settings.Default.Save();
    }
WPF中似乎没有“CheckedChanged”事件,因此我正在尝试:

    private void chkBackup_Checked(object sender, RoutedEventArgs e)
    {
        Properties.Settings.Default.Backup = (chkBackup.IsChecked == true);
        Properties.Settings.Default.Save();
    }

    private void chkBackup_Unchecked(object sender, RoutedEventArgs e)
    {
        Properties.Settings.Default.Backup = (chkBackup.IsChecked == false);
        Properties.Settings.Default.Save();
    }
我没有发现任何错误,但是当我取消选中复选框时,设置没有改变。请帮忙。我做错了什么


感谢您正确地使用了设置对象(来自您提供的代码),因此您可能需要附加选中/未选中的事件处理程序。。。。()


//在你的代码背后。。。。
myCheckbox.OnChecked+=myHandler;

您正在正确使用设置对象(来自您提供的代码),因此可能需要附加选中/未选中的事件处理程序。。。。()


//在你的代码背后。。。。
myCheckbox.OnChecked+=myHandler;

每次使用的表达式都不同。在选中的事件中,您使用的是
chkBackup.IsChecked==true
,如果复选框被选中,则其计算结果为true,否则为false

在未选中的事件中,您使用的是
chkBackup.IsChecked==false
,如果未选中该框,则其计算结果为true,否则为false


您感兴趣的是该框是否选中。用于此操作的表达式是
chkBackup.IsChecked==true
。您当前的解决方案将始终保存
true

您每次使用的表达式不同。在选中的事件中,您使用的是
chkBackup.IsChecked==true
,如果复选框被选中,则其计算结果为true,否则为false

在未选中的事件中,您使用的是
chkBackup.IsChecked==false
,如果未选中该框,则其计算结果为true,否则为false


您感兴趣的是该框是否选中。用于此操作的表达式是
chkBackup.IsChecked==true
。您当前的解决方案将始终保存
true

您的代码看起来很好。你在XAML中连接你的处理程序吗

<CheckBox Name="chkbox"
          Content="Some Checkbox"
          Checked="chkBackup_Checked"
          Unchecked="chkBackup_Unchecked" />


如果您希望它更精简一些,您可以这样做:

<CheckBox Name="chkbox"
          Content="Some Checkbox"
          Checked="chkBackup_CheckChanged"
          Unchecked="chkBackup_CheckChanged" />


private void chkBackup_CheckChanged(object sender, RoutedEventArgs e)
{
    Properties.Settings.Default.Backup = chkBackup.IsChecked;
    Properties.Settings.Default.Save();
}

私有void chkBackup\u CheckChanged(对象发送方,路由目标)
{
Properties.Settings.Default.Backup=chkBackup.IsChecked;
Properties.Settings.Default.Save();
}

您的代码看起来不错。你在XAML中连接你的处理程序吗

<CheckBox Name="chkbox"
          Content="Some Checkbox"
          Checked="chkBackup_Checked"
          Unchecked="chkBackup_Unchecked" />


如果您希望它更精简一些,您可以这样做:

<CheckBox Name="chkbox"
          Content="Some Checkbox"
          Checked="chkBackup_CheckChanged"
          Unchecked="chkBackup_CheckChanged" />


private void chkBackup_CheckChanged(object sender, RoutedEventArgs e)
{
    Properties.Settings.Default.Backup = chkBackup.IsChecked;
    Properties.Settings.Default.Save();
}

私有void chkBackup\u CheckChanged(对象发送方,路由目标)
{
Properties.Settings.Default.Backup=chkBackup.IsChecked;
Properties.Settings.Default.Save();
}

你能详细说明一下“它不起作用”吗?这些方法没有被执行吗?IsChecked属性不是您所期望的吗?我将设置设置为“True”作为默认值。但是,如果未选中该框,则设置将保持为“True”,以处理下面的两个答案。是的,我确实有XAML处理程序。你能详细说明一下“它不工作”吗?这些方法没有被执行吗?IsChecked属性不是您所期望的吗?我将设置设置为“True”作为默认值。但是,如果未选中该框,则设置将保持为“True”,以处理下面的两个答案。是的,我确实有XAML处理程序。这对我来说毫无意义。但你绝对正确!当我做出你建议的改变时,它完全按照你的期望工作。您能解释一下为什么会出现这种情况吗?当选中复选框时,表达式
chkBackup.IsChecked==true
的计算结果为true,因为它被选中是真的。未选中复选框时,表达式
chkBackup.IsChecked==false
的计算结果为true,因为未选中该复选框是true。好,现在这就有意义了。谢谢你,马修!那对我来说毫无意义。但你绝对正确!当我做出你建议的改变时,它完全按照你的期望工作。您能解释一下为什么会出现这种情况吗?当选中复选框时,表达式
chkBackup.IsChecked==true
的计算结果为true,因为它被选中是真的。未选中复选框时,表达式
chkBackup.IsChecked==false
的计算结果为true,因为未选中该复选框是true。好,现在这就有意义了。谢谢你,马修!