2012-03-07 61 views
1

我在写一个C#应用程序,它使用Page-controls来显示一些信息。这是我想怎么办...如何在页面被渲染后立即执行一个方法?

  1. 加载/导航到一个页面
  2. 显示实际的页面
  3. 然后,执行的方法加载页面,并已经显示
  4. 后immedtiately

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

所以会发生什么是正在显示的消息框之前显示的页面actualy。我希望以相反的方式拥有它,我希望显示该页面,然后显示消息框。

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

回答

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

听起来不错,但是页面类似乎没有可用的ContentRendered-Event? – Bogey 2012-03-07 15:05:11

+0

我不认为这符合要求。 Load事件完成后,可能会添加一些控件,例如,单击事件后添加的控件。 – gouderadrian 2014-04-16 13:12:32

0

我有一个类似的问题,我在加载文档时显示一个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 

这使得网页加载(在一个单独的线程也许?),并同时显示在MessageBox。