1

看起来好像XAMLIsLoaded中的对象中没有属性UserControl,即使Loaded事件存在。

但是IsLoaded 上的 MSDN 页面告诉它应该在那里,因为UserControl它源自FrameworkElement.

所以我猜它在 XAML 中被删除了(文档是针对 WPF 的)。但我不敢相信他们只是在 WinRT 中删除了它,他们一定是用别的东西代替了它?

所以,问题:我如何访问WinRT中的IsLoaded布尔值?UserControl

当然,总是可以通过在Loaded事件上注册回调来在每个用户控件上手动完成,但是对于这样一个简单的事情来说是很痛苦的。

4

3 回答 3

3

Silverlight 中也没有FrameworkElement.IsLoaded,WinRT 更接近 Silverlight,而不是 WPF。

至于它为什么被删除,我可以根据WPF 属性的文档做出有根据的猜测:

在新构造的 FrameworkElement 中,此属性以 false 开始,并在设置为 true 后保持为 true,即使随后通过代码从连接的逻辑树中删除了该元素。当元素加载到表示引擎中时,一般表示逻辑会设置真实状态。

基本上,WPF 中的属性有时是错误的。Loaded一个控件可以多次加载(并触发其事件),同时被卸载。WPFIsLoaded属性可以说即使不是真的加载了控件。那是……非常糟糕。

由于至少以下原因之一,他们可能将其删除而不是修复它:

  • 他们不想破坏 WPF 与旧版本的兼容性,或者在 WPF 与 SL / WinRT 中具有不同行为的属性
  • 跟踪某物是否已加载既困难又容易出错,因此本身就很危险
  • 查询控件的加载状态可能是不好的做法/无论如何都是个坏主意

Unloaded如果你真的想自己实现它,那么至少听听Loaded. 但我认为,根据您要执行的操作,可能会有更好的解决方案。

于 2013-04-02T05:32:49.680 回答
2

“加载”控件只是可视化树中的一个控件,因此您可以使用 VisualTreeHelper 检查您的控件和应用程序的 RootVisual 之间是否存在路径,但它可能效率不高,我仍然建议处理事件。如果你真的经常需要它,你可以实现一个附加的属性/行为,它会给你一个可绑定的 IsLoaded 属性。

于 2013-04-01T06:11:09.830 回答
1

框架的 Windows 运行时版本中没有IsLoaded属性。正如您所指出的,您提供的链接不适用于 Windows 运行时。为此,请参阅此 MSDN 链接:FrameworkElement

Loaded事件似乎是完成您所要求的唯一方法。

于 2013-04-01T03:18:50.197 回答