Xaml WinRT中UserControl的IsLoaded属性

Xaml WinRT中UserControl的IsLoaded属性,xaml,windows-8,winrt-xaml,Xaml,Windows 8,Winrt Xaml,看起来XAML中的UserControl对象中似乎没有IsLoaded属性,即使加载的事件存在 但是,由于UserControl派生自FrameworkElement,所以它应该存在 所以我猜它是在XAML中删除的,文档是用于WPF的。但我不敢相信他们刚刚在WinRT中删除了它,他们一定用其他东西替换了它 因此,问题: 如何在WinRT中访问UserControl的IsLoaded boolean 当然,通过在加载的事件上注册回调,总是可以在每个用户控件上手动执行此操作,但对于这样一件简单的事情

看起来XAML中的UserControl对象中似乎没有IsLoaded属性,即使加载的事件存在

但是,由于UserControl派生自FrameworkElement,所以它应该存在

所以我猜它是在XAML中删除的,文档是用于WPF的。但我不敢相信他们刚刚在WinRT中删除了它,他们一定用其他东西替换了它

因此,问题: 如何在WinRT中访问UserControl的IsLoaded boolean

当然,通过在加载的事件上注册回调,总是可以在每个用户控件上手动执行此操作,但对于这样一件简单的事情来说,这是一件痛苦的事情。

在框架的Windows运行时版本中没有IsLoaded属性。正如您所指出的,您提供的链接不是针对Windows运行时的。有关详细信息,请参阅此MSDN链接:

加载的事件似乎是执行您要求的操作的唯一方法。

框架的Windows运行时版本中没有IsLoaded属性。正如您所指出的,您提供的链接不是针对Windows运行时的。有关详细信息,请参阅此MSDN链接:


加载的事件似乎是执行您要求的操作的唯一方法。

加载的控件只是可视化树中的控件,因此您可以使用VisualTreeHelper检查控件和应用程序的RootVisual之间是否存在路径,但这可能不是非常有效,我仍然建议您处理该事件。如果您确实经常需要,可以实现附加的属性/行为,该属性/行为将为您提供可绑定的IsLoaded属性。

加载的控件只是可视化树中的控件,因此您可以使用VisualTreeHelper检查控件与应用程序的RootVisual之间是否存在路径,但这可能不是很有效,我仍然建议处理该事件。如果您确实经常需要,您可以实现一个附加的属性/行为,该属性/行为将为您提供一个可绑定的IsLoaded属性。

Silverlight中也没有FrameworkElement.IsLoaded,WinRT与Silverlight的关系比与WPF的关系更为密切

至于它被删除的原因,我可以根据WPF属性的属性进行有根据的猜测:

此属性从新构造的FrameworkElement开始 false,并在设置为true后保持true,即使元素 随后通过代码从连接的逻辑树中删除。符合事实的 当元素被激活时,状态由通用表示逻辑设置 加载到演示引擎中

基本上,WPF中的属性有时是错误的。控件可以多次加载和触发其加载的事件,同时可以卸载。WPF IsLoaded属性可以表示控件已加载,即使它不是真的加载。那是。。。非常糟糕

他们可能移除了它,而不是修复它,因为至少有一个原因:

他们不想破坏WPF与旧版本的兼容性,也不想拥有一个在WPF和SL/WinRT中行为不同的属性 跟踪某物是否加载是困难的,而且很容易出错,因此本质上是危险的 查询控件的已加载状态可能是一种不好的做法/想法 如果你真的想自己实现它,那么至少听听卸载和加载。但我认为,根据您尝试执行的操作,可能会有更好的解决方案。

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

至于它被删除的原因,我可以根据WPF属性的属性进行有根据的猜测:

此属性从新构造的FrameworkElement开始 false,并在设置为true后保持true,即使元素 随后通过代码从连接的逻辑树中删除。符合事实的 当元素被激活时,状态由通用表示逻辑设置 加载到演示引擎中

基本上,WPF中的属性有时是错误的。控件可以多次加载和触发其加载的事件,同时可以卸载。WPF IsLoaded属性可以表示控件已加载,即使它不是真的加载。那是。。。非常糟糕

他们可能移除了它,而不是修复它,因为至少有一个原因:

他们不想破坏WPF与旧版本的兼容性,也不想拥有一个在WPF和SL/WinRT中行为不同的属性 跟踪某物是否加载是困难的,而且很容易出错,因此本质上是危险的 查询控件的已加载状态可能是一种不好的做法/想法
如果你真的想自己实现它,那么至少听听卸载和加载。但我认为,根据您的努力,可能会有更好的解决方案。

您知道这背后的原理吗?我看不出删除此属性的充分理由。@Mic-不,对不起,我不知道为什么。您知道删除此属性的理由吗
知道吗?我看不出删除此属性的充分理由。@麦克-不,对不起,我不知道为什么。好的,看起来我自己要坚持设置为IsLoaded,但这很痛苦,对我来说没有意义。无论如何,不太严重:顺便说一句,它还保证它的所有子级也在可视化树中,对吗?一旦加载的事件被触发,就可以正确地假设可视化树已经被解析和加载。好吧,看起来我自己要坚持设置IsLoaded,但这很痛苦,对我来说没有意义。无论如何,不太严重:顺便说一句,它还保证它的所有子级也在可视化树中,对吗?一旦加载的事件被触发,就可以正确地假设可视化树已经被解析和加载。