silverlight - Silverlight Loaded 事件如何工作?

标签 silverlight

我将其发布在 Silverlight.net ( here ) 上。我猜他们和其他人一样对负载的工作原理感到困惑,因为我没有得到回应。

找到的 MSDN 文档说:

您可以处理 LayoutUpdated 而不是 Loaded。 LayoutUpdated 是在 Silverlight UI 中启用控件的序列中的最后一个“对象生存期”事件。 LayoutUpdated 的主要限制是初始化可能不是引发 LayoutUpdated 的唯一一次。

(问题 1) 上述语句的反面意味着 Loaded 事件只能引发一次。这是正确的吗?

上面引用的 MSDN 文档也说(关于 Loaded 事件):

当 FrameworkElement 具有已构建并添加到对象树中。 (继承自 FrameworkElement。)

此处引用的文档中重复并强调了上述声明,似乎试图解决该问题。

但是Loaded 事件的详细文档说:

在 Silverlight 中,不保证应用模板后会发生 Loaded 事件。如果您将 Loaded 事件用于相对常见的控制场景,这对您来说可能是一个问题:您想要检查可视化树...

(问题2)这非常令人困惑。 (以上两个陈述是矛盾的)OR(可以构造 FrameworkElement 并将其添加到对象树中并且尚未应用模板)。后者似乎不太可能,因为第二个 msdn 语句引用了可视化树。请澄清哪些陈述是正确的。 (问题3)另外,“不保证在之后发生”是否意味着它可能发生在之前,或者根本不会发生?

最佳答案

Loaded 事件只会引发一次,除非您从对象树中删除该对象并稍后重新添加它,此时一切都会重新发生。

我可以确认 Loaded 事件可以在应用模板之前发生。出于这个原因,我在 OnApplyTemplate() 中执行所有模板和可视化树检查操作,包括任何最后一刻的初始化。

“不保证发生在”之后指的是操作顺序,是的。加载总是在对象添加到对象树后发生。

关于silverlight - Silverlight Loaded 事件如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4720089/

相关文章:

c# - 在 XAML 中使用绑定(bind)设置样式

Silverlight - 通过 C# 将图钉添加到 Bing map

银光 3 : Any free database available for silverlight(stored in isolated storage)?

silverlight - 是否可以通过名称而不是通过列索引访问Silverlight DataGrid列?

silverlight - 如何在 Silverlight 3 中将 Canvas 用作 ItemsControl 的 ItemsPanel

silverlight - Silverlight 中 this.Dispatcher.BeginInvoke() 和 Deployment.Current.Dispatcher.BeginInvoke() 方法的区别

silverlight - 带有 Blend 的自定义控件

wpf - 如何在 WPF/Silverlight 中设置页眉/行

c# - 如何禁用 Windows Phone 的输入预测和字母输入校正?

silverlight - 是否可以将 UserControl 的 DataContext 绑定(bind)到属性