为了账号安全,请及时绑定邮箱和手机立即绑定

保存ToggleButton状态

保存ToggleButton状态

C#
蝴蝶不菲 2021-04-29 16:10:15
我对MVVM不太熟悉,所以我不确定应该从哪里开始。如果有解决方案,但到目前为止,我所做的是以下操作(在后面使用代码):我基本上有一个切换按钮,如果选中它,它将在注册表中写入内容;如果不选中它,则将从注册表中删除相同内容。我只是添加了Checked和Unchecked事件。这里的问题是我想保存ToggleButton的状态(无论它是选中还是未选中)。通过比较注册表,然后将isChecked设置为true或false,我可以在表单加载时执行此操作,但问题是,如果将isChecked设置为true,它将触发“ Checked”事件,并且基本上在注册表上写相同的内容再次。 private void MyWindow_Loaded(object sender, RoutedEventArgs e)    {        RegistryKey rk = Registry.CurrentUser.OpenSubKey            ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);        if (rk.GetValue("Z") == null)        {            Toggle.IsChecked = false;        }        else        {            Toggle.IsChecked = true;        }    }    private void Toggle_Checked(object sender, RoutedEventArgs e)    {        RegistryKey rkRegistryKey = Registry.CurrentUser.OpenSubKey            ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);        rkRegistryKey.SetValue("Z", System.Reflection.Assembly.GetExecutingAssembly().Location);    }    private void Toggle_UnChecked(object sender, RoutedEventArgs e)    {        RegistryKey rkRegistryKey = Registry.CurrentUser.OpenSubKey            ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);        rkRegistryKey.DeleteValue("Z", false);    }
查看完整描述

1 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

您可以使用布尔变量临时“暂停”事件处理程序:


private bool _handleEvents;

private void MyWindow_Loaded(object sender, RoutedEventArgs e)

{

    RegistryKey rk = Registry.CurrentUser.OpenSubKey

        ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);


    _handleEvents = false;

    if (rk.GetValue("Z") == null)

    {

        Toggle.IsChecked = false;

    }

    else

    {

        Toggle.IsChecked = true;

    }

    _handleEvents = true;


}

private void Toggle_Checked(object sender, RoutedEventArgs e)

{

    if (!_handleEvents)

        return;


    RegistryKey rkRegistryKey = Registry.CurrentUser.OpenSubKey

        ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);



    rkRegistryKey.SetValue("Z", System.Reflection.Assembly.GetExecutingAssembly().Location);

}


private void Toggle_UnChecked(object sender, RoutedEventArgs e)

{

    if (!_handleEvents)

        return;


    RegistryKey rkRegistryKey = Registry.CurrentUser.OpenSubKey

        ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);


    rkRegistryKey.DeleteValue("Z", false);

}


查看完整回答
反对 回复 2021-05-08
  • 1 回答
  • 0 关注
  • 168 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信