如何在呈现页面后立即执行方法?

时间:2012-03-07 14:25:21

标签: c# wpf wpf-controls

我正在编写一个C#应用程序,它使用页面控件来显示一些信息。这就是我想做的事情......

  1. 加载/导航到页面
  2. 显示实际页面
  3. 然后,在页面加载并且正在显示之后立即执行一个方法
  4. 对于第1步,我基本上使用

    this.NavigationService.Navigate(new ThePage())
    

    加载页面。页面的构造函数以及我的事件处理函数是

    public partial class ThePage : Page
      {
      public ThePage()
      {
        InitializeComponent();
        Loaded += new RoutedEventHandler(Page_Load);
      }
      protected void Page_Load(object sender, EventArgs e)
      {
        MessageBox.Show("hey");
      }
    }
    

    所以会发生的事情是在显示实际页面之前显示MessageBox。我想反过来说,我希望页面显示,然后显示消息框。

    我知道我可以使用一个计时器,但感觉这将是一个糟糕的解决方案,因为我必须猜测它的间隔,要么冒险使它太短,要么通过设置其间隔太长来人为增加加载时间

2 个答案:

答案 0 :(得分:1)

内容呈现事件如何?

public partial class ThePage : Page
{
  public ThePage()
  {
     InitializeComponent();
     ContentRendered+= new RoutedEventHandler(Page_Load);
  }

  protected void Page_Load(object sender, EventArgs e)
  {
     MessageBox.Show("hey");
  }
}

答案 1 :(得分:0)

我遇到了类似的问题,我在加载文档时显示了一个Messagebox。但是,在页面上显示所有页面内容之前,Messagebox显示,使我的页面空白,但显示消息框。

我通过延迟执行messagebox来解决这个问题,如下所示:

<Extension()> _
Public Sub MyMessageAlert(ByVal pPage As Page, ByVal pMessageText As String)
  Dim s As String = "setTimeout(function(){window.alert('" & pMessageText & "')}, 10);"
  ScriptManager.RegisterClientScriptBlock(pPage, pPage.GetType, "ClientScript", s, True)
End Sub

这允许页面加载(在一个单独的线程上?),并且还显示消息框。