So my InitializeComponent
Window 构造函数中的方法调用通过 XML 运行并添加控件并将它们插入到事件中。
因此,当其中一个控件的属性发生更改时,它会调用订阅该事件的方法。该方法引用尚未构建的控件。
为什么这里会按这个顺序发生?它在 WinForms 中起作用,因为直到创建所有控件之后才会触发事件。有没有办法在 WPF 中强制执行此操作?
我看到的其他解决方案是
我需要在初始化后订阅事件。
每当我处理控件时,我都需要检查 null 。
我也遇到了这个问题,并通过将访问空控件的行包装在空检查中来解决它。这似乎有点像黑客解决方法。
我认为 WPF 试图通过在 InitializeComponent() 期间调用我们的 Checked 事件来提供帮助,以确保任何 UI 逻辑(例如显示/隐藏相关组件)都是根据复选框的初始状态执行的。我测试了默认情况下未选中复选框的情况,并且不会调用事件处理程序,即使我将其连接到“已选中”和“未选中”事件也是如此。我什至在屏幕上带有单个复选框的空白 WPF 项目中重现了这一点,并且其行为相同。
这种默认行为的问题显然是其他一些组件尚未初始化。我认为 WPF 应该等到所有组件都初始化后再默认触发 Checked 事件。这可能不会被视为错误,但无论如何我都会在相关的 MSDN 页面上添加注释......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)