使用WPF时如何将Checked属性状态保存到Properties.Settings?

问题描述 投票:0回答:4

我正在将程序从 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();
    }

我没有收到任何错误,但是当我取消选中该复选框时,设置不会更改。请帮忙。我究竟做错了什么。

谢谢

c# wpf visual-studio-2010
4个回答
4
投票

你每次都使用不同的表达方式。在选中的事件中,您使用

chkBackup.IsChecked == true
如果该框被选中,则计算结果为 true,否则为 false。

在未选中的事件中,您使用

chkBackup.IsChecked == false
,如果未选中该框,则计算结果为 true,否则计算结果为 false。

您感兴趣的是该框是否被选中。用于此目的的表达是

chkBackup.IsChecked == true
。您当前的解决方案将始终保存
true


0
投票

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

<!-- in your xaml -->    
<CheckBox Checked="OnChecked" Unchecked="OnUnchecked"/>

//in your code-behind....
myCheckbox.OnChecked += myHandler;

0
投票

您的代码看起来不错。您是否在 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();
}

0
投票

我发现,在 WPF 中,您可以使用常规布尔值来保存值。这很不方便,但很有效。 :/

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

private void chkBackup_Unchecked(object sender, RoutedEventArgs e)
{
    Properties.Settings.Default.Backup = False;
    Properties.Settings.Default.Save();
}

并检查是否已选中,您可以使用

if (Properties.Settings.Default.Backup == False) 
{
    //enter code here
}
© www.soinside.com 2019 - 2024. All rights reserved.