我觉得很傻,但我就是找不到答案。假设我想在 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()。
如果你的页面和我的一样复杂,那么你会得到类似的信息:
Last LayoutUpdated 将是最好的候选者,但如何检测它呢?因此,“Loaded -> BeginInvoke”似乎是琐碎中的最佳选择。
您还可以使用页面上各个组件的 Loaded 事件。这也非常简单。它们有时可能会在第 4 步和第 5 步之间发生。
如果以上选项都没有帮助(我不这么认为),则必须使用非标准逻辑。例如上面提到的一次性定时器,它会在一段时间后显示消息。或者将您的逻辑基于 LayoutUpdated 计数器。
关于silverlight - 加载事件未完全加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6511012/