WPF的初始化的顺序
/// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Window_Activated(object sender, EventArgs e) { Debug.WriteLine("触发 WindowActivated 事件"); } private void Window_Deactivated(object sender, EventArgs e) { Debug.WriteLine("触发 WindowDeactivated 事件"); } protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { base.OnClosing(e); Debug.WriteLine("触发 OnClosing 事件"); } protected override void OnClosed(EventArgs e) { base.OnClosed(e); Debug.WriteLine("触发 OnClosed 事件"); } protected override void OnInitialized(EventArgs e) { base.OnInitialized(e); Debug.WriteLine("触发 OnInitialized 事件"); } public override void BeginInit() { base.BeginInit(); Debug.WriteLine("触发 BeginInit 事件"); } public override void EndInit() { base.EndInit(); Debug.WriteLine("触发 EndInit 事件"); } protected override void OnActivated(EventArgs e) { base.OnActivated(e); Debug.WriteLine("触发 OnActivated 事件"); } protected override void OnDeactivated(EventArgs e) { base.OnDeactivated(e); Debug.WriteLine("触发 OnDeactivated 事件"); } protected override void OnContentChanged(object oldContent, object newContent) { base.OnContentChanged(oldContent, newContent); Debug.WriteLine("触发 OnContentChanged 事件"); } protected override void OnContentRendered(EventArgs e) { base.OnContentRendered(e); Debug.WriteLine("触发 OnContentRendered 事件"); } }
执行结果是
触发 BeginInit 事件 触发 OnContentChanged 事件 触发 OnInitialized 事件 触发 EndInit 事件 触发 BeginInit 事件 触发 EndInit 事件 触发 WindowActivated 事件 触发 OnActivated 事件 触发 OnContentRendered 事件 触发 OnClosing 事件 触发 WindowDeactivated 事件 触发 OnDeactivated 事件 触发 OnClosed 事件
但是为什么 初始化时候调用2次BeginInit/EndInit 2次呢?
构造函数里面调用InitializeComponent()时产生的BeginInit/EndInit,另外一次是在系统自动调用InitializeComponent()时产生的BeginInit/EndInit
构造函数里面调用InitializeComponent()时产生
触发 BeginInit 事件
触发 OnContentChanged 事件
触发 OnInitialized 事件
触发 EndInit 事件
//构造系统调用InitializeComponent()时产生
触发 BeginInit 事件
触发 EndInit 事件
//
触发 WindowActivated 事件
触发 OnActivated 事件
触发 OnContentRendered 事件
触发 OnClosing 事件
触发 WindowDeactivated 事件
触发 OnDeactivated 事件
触发 OnClosed 事件;