【发布时间】:2016-05-31 08:09:00
【问题描述】:
我一直在寻找这个已经很久了,但仍然不知道如何实现它,这是我的第一个 C#/WPF 应用程序,所以我完全有可能已经看到了答案,只是不知道它,如果它道歉真的很容易。
我有一个启动 WPF 窗口的 winForms 应用程序(winForms 是因为该应用程序是一个系统托盘图标,它会生成其他窗口)。我目前唯一拥有的 WPF 窗口有两个复选框,我已设法将其值存储在 app.config 中,当应用程序首次启动时,该值也成功应用于复选框。但是,我无法弄清楚每次打开窗口时如何将值应用于复选框。
窗口由此打开(试图修复它被注释掉了):
private void notifyIcon1_DoubleClick(object Sender, EventArgs e)
{
var RestartPortal = new RestartPortal();
//RestartPortal.InvalidateVisual();
RestartPortal.Show();
}
在应用程序运行时将值应用于窗口(以及另一次尝试):
public RestartPortal()
{
InitializeComponent();
alwaysOnTopCheck.InvalidateVisual();
closeWhenCompleteCheck.InvalidateVisual();
alwaysOnTopCheck.IsChecked = bool.Parse(ConfigurationManager.AppSettings.Get("onTopChecked"));
closeWhenCompleteCheck.IsChecked = bool.Parse(ConfigurationManager.AppSettings.Get("autoCloseChecked"));
}
如果能帮上忙,我将不胜感激。
谢谢。
编辑:在测试中,我注意到复选框似乎记住了应用程序第一次运行时分配的值,更奇怪的是,每次加载窗口时,它们都会将此值强制到 app.config 文件中。为了更好地解释:
- 运行应用程序
- 加载窗口
- 在记事本中加载配置并检查值是否相关
- (关闭记事本)取消选中复选框
- 再次在记事本中打开配置文件以检查值是否已正确保存。
- 关闭窗口
- 打开窗口
- 打开配置文件(再次在新记事本中)并查看值是否相关,并且通过打开窗口,这些值已被强制恢复为应用程序首次运行时所保存的值。
在我看来,发生这种情况的唯一方法是,如果有东西以某种方式调用复选框的事件处理程序,因为这是唯一可以保存到 app.config 文件的地方。我现在比以前更加困惑,以防万一这里是复选框的 XAML:
<CheckBox x:Name="closeWhenCompleteCheck" Margin="5" HorizontalAlignment="Left" Content="Close when complete" Checked="closeWindow_Checked" Unchecked="closeWindow_Unchecked"/>
<CheckBox x:Name="alwaysOnTopCheck" Margin="5" HorizontalAlignment="Left" Content="Always on top" Checked="onTop_Checked" Unchecked="onTop_Unchecked"/>
这里是选中和未选中的 c#(尽管只有一个复选框,因为它们是相同的):
private void onTop_Checked(object sender, RoutedEventArgs e)
{
this.Topmost = true;
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings["onTopChecked"].Value = (alwaysOnTopCheck.IsChecked).ToString();
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("AppSettings");
}
private void onTop_Unchecked(object sender, RoutedEventArgs e)
{
this.Topmost = false;
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings["onTopChecked"].Value = (alwaysOnTopCheck.IsChecked).ToString();
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("AppSettings");
}
任何帮助都将一如既往地受到赞赏(此时可能会挽救我的理智)。
谢谢。
【问题讨论】:
标签: c# .net wpf winforms checkbox