26

FrameworkElement、UIElement、Control、ContentControl、Decorator などの一般的なクラスから派生する WPF カスタム コントロールに対して呼び出されるイベントとオーバーライドの順序を示す参照として役立つ図を探しています。

私は特に、コントロールが表示され、操作できるようになるプロセスを処理するイベントとオーバーライドに関心があります。言い換えると、MouseLeftButtonDown など、操作の準備が整った後にユーザーが操作するコントロールを処理できるイベントを示すこの図にはあまり興味がありません。

私が探しているのは、この図のようなものです(これらのような図は、WPFウィンドウまたはアプリケーションのライフサイクルを説明しています) が、カスタム コントロール用です。

このページも見たことがありますが、私の意見では単純すぎるように思えます。Initializedそのページは、基本的に、 、Loaded、およびUnloadedイベントがほとんどだと言っているようです。説明のために、カスタム コントロールで使用する必要がある一般的なイベント/オーバーライドのいくつかを以下に示します。

  • コンストラクタ
  • Loaded
  • UnLoaded
  • IsVisibleChanged
  • OnApplyTemplate

OnOpenedPopupや ExpanderOnExpandedなどの、もう少し専門的なオーバーライドに加えて、

私が抱えている問題は、いつ次のようなことができるかを忘れVisualStateManager.GoToState(...)てしまうことです(OnApplyTemplate私が信じている最初の本当のチャンスです)。また、IsVisibleChanged など、使用する必要があるイベントを発見し続けます (このイベントは、ユーザーが自分のコントロールを含むタブに戻ったときに、「再読み込み/更新」状態の変更を行うコントロールが必要な場合に必要であることが判明しました) . だから私は、カスタムコントロールのために本当に注意を払うべきイベント/オーバーライド がまだ他にあるのだろうか? ここで、これらの事柄を相互に関連させて示す図が役立ちます。

これらのタイプのイベント/オーバーライドを考慮すると、この Silverlight チャートは私が探しているものにかなり近いですが、 WPFの場合です。その投稿に対する一部のコメント投稿者は、WPF のイベント/オーバーライドは Silverlight のものとは異なると言っています。 もしよろしければ、似たような図を教えていただけないでしょうか。

このようなダイアグラムの必要性をさらに説明するために、ContentControl から派生したカスタム コントロールで目撃した次の一連のイベントを考えてみましょう。

  1. アプリが起動しました。(私のカスタム コントロールは、最初のタブとは別のタブにあります。)
  2. Initialized呼び出されたイベント コールバック
  3. Loaded呼び出されたイベント コールバック
  4. (カスタム コントロールを含むタブをクリックします)
  5. IsVisibleChanged呼び出されたイベント コールバック
  6. OnApplyTemplate呼び出されたオーバーライド
  7. Loaded呼び出されたイベント コールバック
  8. Loadedイベントコールバックが再度呼び出されました
  9. Loaded3 回連続で呼び出されるイベント コールバック
  10. (コントロールが完全に表示され、操作できるようになりました)
4

2 に答える 2

2

そのような包括的な図が存在するとは思えません。自分で作ってみてはどうですか?関心のあるすべてのメソッドやイベントをTrace.WriteLine(new StackFrame(1).GetMethod().Name);オーバーライドし、各オーバーライドに を入れます。出力は、それらが呼び出された順序を示します。

于 2017-03-20T19:40:09.550 に答える