如何在卸载之前获取FrameworkElement属性

时间:2010-10-11 19:16:47

标签: wpf wpf-controls frameworkelement

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

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

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

简短说明

我打算创建单例--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?

1 个答案:

答案 0 :(得分: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事件。