看起来XAML中的IsLoaded
对象中没有UserControl
属性,即使Loaded
事件存在。
但是MSDN page on IsLoaded告诉它应该在那里,因为UserControl
来自FrameworkElement
。
所以我猜它在XAML中删除了(该文档适用于WPF)。但我不敢相信他们只是在WinRT中删除了它,他们必须用别的东西替换它?
所以,问题:
如何在WinRT中访问IsLoaded
的{{1}}布尔值?
当然,通过在UserControl
事件上注册回调,总是可以在每个用户控件上手动执行,但这对于这么简单的事情来说很痛苦。
答案 0 :(得分:3)
Silverlight中也没有FrameworkElement.IsLoaded
,而WinRT更接近Silverlight而不是WPF。
至于它被移除的原因,我可以根据WPF属性的documentation进行有根据的猜测:
从新构造的FrameworkElement开始,此属性启动 false,并且在设置为true后仍然为true,即使元素也是如此 随后通过代码从连接的逻辑树中删除。真正 当元素为时,state由一般表示逻辑设置 加载到演示引擎中。
基本上,WPF中的属性有时错误。控件可以多次加载(并触发其Loaded
事件),并在此期间卸载。 WPF IsLoaded
属性可以表示控件已加载,即使它不是真的。那......非常糟糕。
他们可能会删除它而不是修复它,原因至少有以下一个原因:
如果你真的想自己实现它,那么至少要听Unloaded
以及Loaded
。但我认为,根据您的目标,可能会有更好的解决方案。
答案 1 :(得分:2)
“已加载”控件只是可视树中的控件,因此您可以使用VisualTreeHelper检查控件与应用程序的RootVisual之间是否存在路径,但它可能效率不高,我仍然会建议处理事件。你可以实现一个附加的属性/行为,如果你真的经常需要它,它会为你提供一个可绑定的IsLoaded属性。
答案 2 :(得分:1)
框架的Windows运行时版本中没有IsLoaded
属性。正如您所指出的,您提供的链接不适用于Windows运行时。为此,请参阅此MSDN链接:FrameworkElement。
Loaded
事件似乎是你要求的唯一方法。