silverlight - 加载事件未完全加载

标签 silverlight windows-phone-7

我觉得很傻,但我就是找不到答案。假设我想在 MainPage 加载时向用户显示一些消息。问题是,如果我在 Loaded 事件 (MessageBox.Show()) 上执行此操作,则在加载我的页面之前会显示弹出窗口,这会给用户留下此消息和黑色背景。这是一种沉闷的情况。任何事件都可以解决问题的想法。还有其他方法,例如后台 worker 或 NavigationInTransition_EndTransition 事件,但应该有更优雅的方法吗?

最佳答案

您可以轻松测试所有标准方法。我花了比写这篇文章更少的时间来做到这一点。

在页面构造函数中:

Loaded += new RoutedEventHandler(TestPage_Loaded);
LayoutUpdated += new EventHandler(TestPage_LayoutUpdated);

各自的方法:
    void TestPage_LayoutUpdated(object sender, EventArgs e)
    {
        Debug.WriteLine("LayoutUpdated");
    }

    void TestPage_Loaded(object sender, RoutedEventArgs e)
    {
        Debug.WriteLine("Loaded");
        Dispatcher.BeginInvoke(() =>
        {
            Debug.WriteLine("Loaded -> BeginInvoke");
        });
    }

还将调试写入添加到 OnNavigateTo()。

如果你的页面和我的一样复杂,那么你会得到类似的信息:
  • OnNavigatedTo
  • 布局更新
  • 已加载
  • 布局更新
  • 已加载 -> 开始调用
  • 多次布局更新

  • Last LayoutUpdated 将是最好的候选者,但如何检测它呢?因此,“Loaded -> BeginInvoke”似乎是琐碎中的最佳选择。

    您还可以使用页面上各个组件的 Loaded 事件。这也非常简单。它们有时可能会在第 4 步和第 5 步之间发生。

    如果以上选项都没有帮助(我不这么认为),则必须使用非标准逻辑。例如上面提到的一次性定时器,它会在一段时间后显示消息。或者将您的逻辑基于 LayoutUpdated 计数器。

    关于silverlight - 加载事件未完全加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6511012/

    相关文章:

    c# - 如何在 silverlight 应用程序中接收电子邮件?

    xaml - WP7 中较粗的 ProgressBar,如何?

    c# - TemplateBinding 到自定义控件上的 DependencyProperty 不起作用

    c# - 在程序 C# 中添加延迟

    c# - 将 LongListSelector 绑定(bind)到异步更新的嵌套 ObserverCollection(使用 WebClient)

    asp.net - 将现有的 .net 功能扩展到 iPad

    database - 找不到数据库文件。检查数据库的路径。 Windows Phone 7 中的数据源

    c# - 使用蓝牙耳机控制WP7和WP8应用

    silverlight - 在 WP7 上以编程方式创建 Silverlight Grid 列时出现问题

    silverlight - 绑定(bind)完成后如何引发事件?