加载所有页面组件时的UWP事件?

时间:2016-07-24 01:10:15

标签: win-universal-app uwp

这看起来很简单,但我用google搜索&谷歌搜索没有成功。我正在尝试找到页面加载事件排序的确定列表。到目前为止,我的观察非常混乱,因为主页面的Loaded事件在一些用户控件Loaded事件之前完成。我认为在WPF中有一个LoadCompleted事件,但我找不到相应的事件。

谢谢!

1 个答案:

答案 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的)

故事的寓意是,除非你发布实际的代码,否则没有物理方法可以说出实际出错的地方。每个控件都可以有多个加载的事件。你的延迟可能是由任何事情引起的。