2012-03-07 58 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。