这看起来很简单,但我用google搜索&没有成功。我试图找到页面加载事件排序的权威列表。到目前为止,我的观察结果非常混乱,因为主页的Loaded事件在用户控制Loaded事件之前完成。我认为在WPF中有一个LoadCompleted事件,但我找不到相同的事件。所有页面组件加载时发生的UWP事件?
谢谢!
这看起来很简单,但我用google搜索&没有成功。我试图找到页面加载事件排序的权威列表。到目前为止,我的观察结果非常混乱,因为主页的Loaded事件在用户控制Loaded事件之前完成。我认为在WPF中有一个LoadCompleted事件,但我找不到相同的事件。所有页面组件加载时发生的UWP事件?
谢谢!
从内向外控制负载。
请考虑下面的例子:
我的XAML页面
<Page
... Loaded="Page_Loaded">
<Grid Loaded="Grid_Loaded">
<StackPanel Loaded="StackPanel_Loaded" Orientation="Vertical">
<TextBlock Loaded="TextBlock_Loaded" Text="My Text"/>
<Button Loaded="Button_Loaded" Content="Button"/>
</StackPanel>
</Grid>
</Page>
我后面的代码
namespace App1
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
this.Loaded += MainPage_Loaded;
}
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
this.Frame.Loaded += Frame_Loaded;
}
private void Frame_Loaded(object sender, RoutedEventArgs e)
{
Debug.WriteLine("Frame Loaded");
}
private void Page_Loaded(object sender, RoutedEventArgs e)
{
Debug.WriteLine("Page Loaded");
}
private void Grid_Loaded(object sender, RoutedEventArgs e)
{
Debug.WriteLine("Grid Loaded");
}
private void StackPanel_Loaded(object sender, RoutedEventArgs e)
{
Debug.WriteLine("Stack Panel Loaded");
}
private void TextBlock_Loaded(object sender, RoutedEventArgs e)
{
Debug.WriteLine("Text Block Loaded");
}
private void Button_Loaded(object sender, RoutedEventArgs e)
{
Debug.WriteLine("Button Loaded");
}
}
}
在此设置你的输出应按钮加载,堆叠面板加载,电网加载,页面加载,框架加载。
而事实上,当我编译和运行这个我看到
文本块加载
按钮加载
堆叠面板加载
电网加载的页面加载
加载框架
在我的输出窗口中。
这是因为控件是从内向外加载的。现在,当您使用异步控件时,您开始遇到问题。你实际上可能有两个你关心的加载事件。一个说,UI元素被加载,一个说这个UI元素的内容被加载。
我们以WebView为例。
它有多个完成的事件。
LoadCompleted当顶级导航完成并且 内容加载到web视图控制期间或者当 加载发生错误时发生。
FrameDOMContentLoaded当WebView中的一个框架完成解析其当前HTML内容时发生 。
FrameNavigationCompleted当WebView中的框架已完成加载其内容时发生。
它还具有正常加载的事件以及
加载当FrameworkElement的已构建并加入到 对象树时发生,并准备好进行交互。 (继承自 FrameworkElement的)
所以这个故事的寓意是,除非你发布你的实际代码,没有物理的方式告诉什么是真正走错了。每个控件都可以有多个加载的事件。你的延迟可能是由任何事情造成的。