这看起来很简单,但我用google搜索&谷歌搜索没有成功。我正在尝试找到页面加载事件排序的确定列表。到目前为止,我的观察非常混乱,因为主页面的Loaded事件在一些用户控件Loaded事件之前完成。我认为在WPF中有一个LoadCompleted事件,但我找不到相应的事件。
谢谢!
答案 0 :(得分:-1)
从内到外控制负荷。
请考虑以下示例:
我的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");
}
}
}
使用此设置,您的输出应为按钮加载,堆叠面板加载,网格加载,页面加载,帧加载。
事实上,当我编译并运行它时,我看到了
加载文本块
按钮已加载
加载堆栈面板
Grid Loaded Page Loaded
加载框架
在我的输出窗口中。
这是因为控件是从里到外加载的。现在,当您使用异步控件时,您开始遇到问题。您实际上可能有两个您关心的加载事件。一个人说是加载了UI元素,一个人说要加载该UI元素的内容。
让我们以WebView为例。
它有多个已完成的事件。
LoadCompleted 在顶级导航完成时发生 内容加载到WebView控件或在期间发生错误 负荷。
FrameDOMContentLoaded 在WebView中的帧完成时发生 解析其当前的HTML内容。
FrameNavigationCompleted 在WebView中的帧具有时发生 完成加载其内容。
它也有正常的Loaded事件
已加载在构造并添加FrameworkElement时发生 到对象树,并准备好进行交互。 (继承自 FrameworkElement的)
故事的寓意是,除非你发布实际的代码,否则没有物理方法可以说出实际出错的地方。每个控件都可以有多个加载的事件。你的延迟可能是由任何事情引起的。