WPF自定义控件生命周期图?

Jas*_*ank 20 wpf event-handling wpf-controls

我正在寻找一个图表,作为参考,显示事件和覆盖的顺序,这些事件和覆盖调用WPF自定义控件,这些控件派生自通用类,如FrameworkElement,UIElement,Control,ContentControl,Decorator等.

我对控制过程变得可见并准备好与之交互的事件和覆盖特别感兴趣.换句话说,我对这个图表并不感兴趣,这个图表显示了可以处理用户在准备好与之交互后与之交互的事件,例如MouseLeftButtonDown.

我正在寻找的是像这个图(这些图解释了WPF 窗口应用程序的生命周期),但用于自定义控件.

我也看过这个页面,在我看来这看起来太简单了.该网页似乎基本上说,有大多只是Initialized,LoadedUnloaded事件.为了说明,我需要在自定义控件中使用的一些常规事件/覆盖包括:

  • 构造函数
  • Loaded
  • UnLoaded
  • IsVisibleChanged
  • OnApplyTemplate

随着稍微更专业的覆盖,如Popup OnOpened和Expander OnExpanded等.

我遇到的问题是我忘记了什么时候能做的事情VisualStateManager.GoToState(...)(这OnApplyTemplate是我相信的第一个真正的机会).而且我还会发现我需要使用的事件,例如IsVisibleChanged(当用户返回到包含我的控件的Tab时,当我需要一个控件来执行"重新加载/刷新"状态更改时,此事件被证明是必要的) .所以我一直想知道还有其他这样的事件/覆盖,我真的要注意自定义控件吗? 这是一个显示这些事物相互关联的图表的地方.

考虑到这些类型的事件/覆盖,这个Silverlight图表非常接近我正在寻找的,但对于WPF.该帖子上的一些评论者说,WPF的事件/覆盖与Silverlight不同. 如果是这样,你能指点我一个类似的图表吗?

为了进一步说明对这种图的需求,请考虑我在源自ContentControl的自定义控件上目睹的以下事件序列:

  1. 应用程序启动了.(我的自定义控件与初始选项卡位于不同的选项卡中.)
  2. Initialized 事件回调叫
  3. Loaded 事件回调叫
  4. (我单击包含我的自定义控件的选项卡)
  5. IsVisibleChanged 事件回调叫
  6. OnApplyTemplate 覆盖被叫
  7. Loaded 事件回调叫
  8. Loaded 事件回调再次调用
  9. Loaded 事件回调连续第三次调用
  10. (控制现在完全可见并准备好与之交互)

bit*_*onk 1

我怀疑是否存在如此全面的图表。不如你自己做一个怎么样?覆盖您感兴趣的所有方法和/或事件,并Trace.WriteLine(new StackFrame(1).GetMethod().Name);在每个覆盖中添加一个。您的输出将告诉您它们被调用的顺序。