2016-07-24 76 views
0

这看起来很简单,但我用google搜索&没有成功。我试图找到页面加载事件排序的权威列表。到目前为止,我的观察结果非常混乱,因为主页的Loaded事件在用户控制Loaded事件之前完成。我认为在WPF中有一个LoadCompleted事件,但我找不到相同的事件。所有页面组件加载时发生的UWP事件?

谢谢!

回答

-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"); 
     } 
    } 
} 

在此设置你的输出应按钮加载,堆叠面板加载,电网加载,页面加载,框架加载。

而事实上,当我编译和运行这个我看到

文本块加载

按钮加载

堆叠面板加载

电网加载的页面加载

加载框架

在我的输出窗口中。

这是因为控件是从内向外加载的。现在,当您使用异步控件时,您开始遇到问题。你实际上可能有两个你关心的加载事件。一个说,UI元素被加载,一个说这个UI元素的内容被加载。

我们以WebView为例。

它有多个完成的事件。

LoadCompleted当顶级导航完成并且 内容加载到web视图控制期间或者当 加载发生错误时发生。

FrameDOMContentLoaded当WebView中的一个框架完成解析其当前HTML内容时发生 。

FrameNavigationCompleted当WebView中的框架已完成加载其内容时发生。

它还具有正常加载的事件以及

加载当FrameworkElement的已构建并加入到 对象树时发生,并准备好进行交互。 (继承自 FrameworkElement的)

所以这个故事的寓意是,除非你发布你的实际代码,没有物理的方式告诉什么是真正走错了。每个控件都可以有多个加载的事件。你的延迟可能是由任何事情造成的。

相关问题