正在WPF C#中保存子窗口的状态
本文关键字:窗口 状态 保存 WPF 正在 | 更新日期: 2023-09-27 18:21:47
我有一个WPF GUI,允许用户打开选项菜单。选项菜单将在一个新窗口中打开,并填充有复选框。当用户按下"确定"按钮时,窗口关闭。但是,它不记得在重新打开时选中了哪些复选框。我如何确保程序能够记住哪些框被选中,哪些框没有被选中?
只需指定:我只需要记住在程序运行期间选中了哪些框。退出整个程序后,程序不需要记住
谢谢!
这是我在主窗口Window1.XAML.CS:下的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace CartToolsPrototype1
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
//Exit
private void Exit_Click(object sender, RoutedEventArgs e)
{
System.Environment.Exit(0);
}
//Options
private void Options_Click(object sender, RoutedEventArgs e)
{
var newWindow = new Options();
newWindow.Show();
}
}
}
这是我在子窗口选项XAML.CS下的代码。这是基于第一个答案。我已经通读了你发布的链接,这很有道理。我的设置文件中有条件,当用户选中我的复选框时,我会更改这些条件。然后,我有一个条件来确定是否根据设置文件选中该框,但它似乎没有反映任何更改。。。
public partial class Options_Window : Window
{
public Options_Window()
{
InitializeComponent();
//Checkbox1
if (Properties.Settings.Default.OptionsBox1 == true)
checkBox1.IsChecked = true;
else
checkBox1.IsChecked = false;
}
//Close Window
private void button1_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
//Ask before downloading... - CHECKED
private void checkBox1_Checked(object sender, RoutedEventArgs e)
{
Properties.Settings.Default.OptionsBox1 = true;
}
//Ask before downloading... - UNCHECKED
private void checkBox1_Unchecked(object sender, RoutedEventArgs e)
{
Properties.Settings.Default.OptionsBox1 = false;
}
您可以使用"设置"在不同的Windows/控件之间共享数据,甚至在关闭/启动应用程序时保存应用程序数据。
.NET Framework允许您创建和访问以下值在应用程序执行会话之间持久化。这些值是称为设置。设置可以代表用户偏好,或有价值应用程序需要使用的信息。例如,您可能创建一系列设置,用于存储用户对颜色的首选项应用程序的方案。或者您可以存储连接字符串指定应用程序使用的数据库。设置允许您既要保持对应用程序至关重要的信息在代码之外,并创建存储首选项的配置文件个人用户。
您可以在任何窗口中保存设置:
Properties.Settings.Default.mySetting = true;
Properties.Settings.Default.Save();
您可以在任何窗口中读取/使用设置:
this.Property = Properties.Settings.Default.mySetting;
首先,我们需要一个存储属性的设置对象。记住正确实现INotifyPropertyChanged
class MySettings : INotifyPropertyChanged
{
public bool IsSettingSet {get;set;}
}
然后在我们的设置窗口中,只需使用绑定将视图控件绑定到您的设置对象。
<Window
x:Class="SettingsWindow"
...>
<CheckBox IsChecked="{Binding IsSettingSet}"/>
</Window>
最后,在实际打开窗口的位置,需要将设置对象分配给设置窗口的DataContext。
class MainWindow
{
public MainWindow()
{
InitializeComponent();
}
void OpenSettingsWindow()
{
var dlg = new SettingsWindow();
dlg.DataContext = mGlobalSettings;
dlg.ShowDialog();
}
MySettings mGlobalSettings = new MySettings();
}
现在,每次你打开窗口,你的设置都会和上次一样。只要你不关闭应用程序。
如果只是在运行时,那么这很容易。你可以使用一个静态类:
public static class MyState
{
public static bool IsChecked1 { get; set; }
}
或者类的单例实例:
public class MyState
{
private static MyState _instance = new MyState();
public static MyState Instance
{
get { return _instance; }
}
private MyState() {}
public bool IsChecked1 { get; set; }
}
加载窗口时,从MyClass的属性中获取状态。当窗口关闭时,设置MyClass的属性。
在Options.xaml.cs:中
private void Window_Loaded(object sender, RoutedEventArgs e)
{
CheckBox1.IsChecked = MyState.IsChecked1;
}
private void Window_Closed(object sender, EventArgs e)
{
MyState.IsChecked1 = CheckBox1.IsChecked;
}