1

UI 設定システムを実現する必要があります。UI 要素の一部のプロパティ (実行時にユーザーが変更できます) を永続ストレージからロード/保存します。例えば:

  • DevExpress グリッド コントロール - 列幅、可視性、要約領域など (このコントロールには RestoreLayoutFrom/SaveLayoutTo などのメソッド ペアのセットがありますが、SaveLayoutToStream(Xml) は grid.Unloaded ハンドラーでは機能しません - グリッドが 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 は、いくつかの異なるタイプのコントロールを操作する方法を知っています。

しかし、コントロールの設定を格納するのに適切なタイミングは、ウィンドウとユーザー コントロールのどちらのコンテナーでしょうか?

4

1 に答える 1

1

Window's 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 に答える