1

需要实现 UI 设置系统 - 将 UI 元素的某些属性(可以由用户在运行时修改)从/到持久存储中加载/保存。例如:

  • DevExpress 网格控件 - 列宽、可见性、摘要区域等(此控件具有一组方法对,如 RestoreLayoutFrom/SaveLayoutTo,但 SaveLayoutToStream(Xml) 在网格中不起作用。未加载的处理程序 - 当网格与 PresentationSource 断开连接时)
  • 网格行/列,用户可以通过 GridSplitter 调整其宽度/高度
  • 相当大的弹出控件

在控件加载/初始化/等之后从设置存储中设置控件属性很容易,但是如何捕捉控件卸载之前的时刻(当它们仍然保留在可视树中时)以检索它们的设置以进行保存?

简短的介绍

我打算创建单例 - UISettingsManager,它里面有一个字典,里面有成对的[元素 Uid,元素设置数据]。在可视化容器(Window、UserControl)中,这个管理器可以这样使用:

public partial class PageHeader : UserControl
{
    public PageHeader()
    {
        InitializeComponent();

        UISettingsManager.RestoreSettings(myGridControl);
        UISettingsManager.RestoreSettings(myPopup);
    }
}

myGridControl 和 myPopup 具有唯一的 Uid(在应用程序范围内),因此 UISettingsManager 可以从内部字典中检索它们的设置并将其应用于控件;当然 UISettingsManager 知道如何使用一些不同类型的控件。

但是,当存储控件设置的正确时机时,哪个容器是 Window 或 UserControl?

4

1 回答 1

1

我会使用 Window 的Closing事件。

public class MyWindow : Window
{
    public MyWindow()
    {
        this.Closing += new System.ComponentModel.CancelEventHandler(MyWindow_Closing);
    }

    void MyWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        // Save what I want to here
    }
}

这将是最安全的选择,因为您总是会在某个时候关闭窗口。

但是,可能还有其他选择,包括用户控件的 Unloaded 事件。

于 2010-10-11T19:45:55.867 回答