【问题标题】:Saving the State of a WPF Application Page保存 WPF 应用程序页面的状态
【发布时间】:2012-12-02 21:59:24
【问题描述】:

我正在 WPF 中创建一个软件,并且在该软件中,用户可以加载图像并配置地图。

基本上,一旦加载了(地图的)图像,用户就可以添加其他图像(如宝藏或怪物的图片等),并将它们拖放到地图的图像中。

当用户关闭软件并重新打开它时,我希望在关闭应用程序之前打开最后一张图片,并且添加的 UI 元素位于同一个位置,就像用户设置的方式一样。

我能想到的一种方法是将图像文件存储在字节数组中,或者将文件位置和其他 UI 元素位置保存在文本文件中,并在每次加载应用程序时检查它。

但是,有没有更简单的方法来解决这个问题?有没有办法可以存储 WPF 应用程序页面的状态?

【问题讨论】:

    标签: c# wpf wpf-controls savestate


    【解决方案1】:

    也许您可以在退出时保存 Windows xaml 并在应用程序启动时重新加载。

        public MainWindow()
        {
            InitializeComponent();
            Loaded += new RoutedEventHandler(MainWindow_Loaded);
            Closing += new CancelEventHandler(MainWindow_Closing);
        }
    
    
        void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
           LoadExternalXaml();
        }
    
        void MainWindow_Closing(object sender, CancelEventArgs e)
        {
            SaveExternalXaml();
        }
    
    
        public void LoadExternalXaml()
        {
            if (File.Exists(@"C:\Test.xaml"))
            {
                using (FileStream stream = new FileStream(@"C:\Test.xaml", FileMode.Open))
                {
                    this.Content = XamlReader.Load(stream);
                }
            }
        }
    
        public void SaveExternalXaml()
        {
            using (FileStream stream = new FileStream(@"C:\Test.xaml", FileMode.Create))
            {
                XamlWriter.Save(this.Content, stream);
            }
        }
    

    【讨论】:

    • 我试过这段代码,但是,当我尝试加载 XAML 时,它会停止调试。但是,它确实保存了 xaml。
    • 在负载周围放置一个 Try/Catch 并检查导致异常的原因,我多年来一直在使用它而没有问题
    • @sa_ddam213 它可以工作,但似乎并没有将所有内容都转储到.xaml。 EventHandlers 不起作用,例如按钮的Click 回调,甚至控件的Name 属性也没有被转储。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多