我正在寻找一张图表,用作参考,展示基于常见类(例如FrameworkElement、UIElement、Control、ContentControl、Decorator等)派生的WPF自定义控件调用的事件和重写的顺序。
我特别关注与控件变得可见并准备好进行交互的过程有关的事件和重写。换句话说,我对这张图表展示控件在准备好进行交互之后处理用户交互的事件不是很感兴趣,例如像MouseLeftButtonDown这样的事件。
我所要寻找的是类似这个图表的东西(这些图表解释了WPF窗口或应用程序的生命周期),但是是针对自定义控件的。
我也看到过这个页面,但它让人觉得太简单了。那个页面似乎基本上只有Initialized、Loaded和Unloaded事件。举例来说,我需要利用自定义控件中的一些通用事件/重写,包括:
- Constructor
Loaded
UnLoaded
IsVisibleChanged
OnApplyTemplate
还有一些稍微特殊一点的重写,例如Popup的OnOpened和Expander的OnExpanded等。
我遇到的问题是,我忘记了什么时候可以执行像VisualStateManager.GoToState(...)
这样的操作(我认为OnApplyTemplate
是第一个真正的机会)。 我还不断发现需要利用的事件,例如IsVisibleChanged(当我需要控件在用户返回包含我的自定义控件的选项卡时进行“重新加载/刷新”状态更改时,此事件被证明是必要的)。 所以我一直在想,是否还有其他应该特别关注的类似事件/重写? 这就是显示它们相互关系的图表将有所帮助的地方。考虑到这些类型的事件/重写,这个Silverlight图表与我所寻找的相当接近,但适用于WPF。那篇文章的一些评论者说,WPF的事件/重写与Silverlight的不同。如果是这样,请您指出类似的图表。
为了进一步说明需要这样的图表,请考虑我刚刚在派生自ContentControl的自定义控件上看到的事件序列:
1. 应用程序启动。(我的自定义控件在不同的选项卡中。) 2. 调用
Initialized
事件回调。
3. 调用Loaded
事件回调。
4. (我点击包含我的自定义控件的选项卡。)
5. 调用IsVisibleChanged
事件回调。
6. 调用OnApplyTemplate
重写。
7. 调用Loaded
事件回调。
8. 再次调用Loaded
事件回调。
9. 连续第三次调用Loaded
事件回调。
10.(控件现在完全可见并准备好与之交互。)