2

我有一个 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();
        }
    }
}

这是我在子窗口 Options.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;
        }
4

3 回答 3

6

您可以使用设置在不同的 Windows/控件之间共享数据,甚至在关闭/启动应用程序时保存应用程序数据。

.NET Framework 允许您创建和访问在应用程序执行会话之间持久存在的值。这些值称为设置。设置可以代表用户偏好或应用程序需要使用的有价值的信息。例如,您可以创建一系列设置来存储用户对应用程序配色方案的偏好。或者,您可以存储指定应用程序使用的数据库的连接字符串。设置允许您在代码之外保留对应用程序至关重要的信息,并创建存储个人用户偏好的配置文件。

您可以在任何窗口中保存设置:

Properties.Settings.Default.mySetting = true;
Properties.Settings.Default.Save();

您可以在任何窗口中读取/使用设置:

this.Property = Properties.Settings.Default.mySetting;
于 2013-07-10T18:16:38.530 回答
1

首先我们需要一个设置对象,它存储我们的属性。记得正确实现 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();
}

现在每次打开窗口时,您的设置都会和上次一样。只要您不关闭应用程序。

于 2013-07-12T13:37:28.017 回答
0

如果它只是在运行时,那么它很容易。您可以使用静态类:

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;
}
于 2013-07-10T19:03:41.343 回答