2012-03-07 4 views
1

Я пишу приложение C#, которое использует Page-controls для отображения некоторой информации. Вот что я хотел бы сделать ...Как выполнить метод сразу после предоставления страницы?

  1. Load/Перейдите на страницу
  2. Показать фактическую страницу
  3. Затем выполнить метод 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"); 
    } 
} 

Так что же происходит, что MessageBox показывается перед выводом на экран, что страница actualy. Я хотел бы, чтобы это было наоборот, я хотел бы, чтобы страница отображалась, и THEN показывали окно сообщения.

Я знаю, что могу использовать таймер, но похоже, что это было бы дерьмовым решением, так как я должен был угадать его интервал и либо риск сделать его слишком коротким, либо иным образом искусственно увеличивать время загрузки, длинный.

ответ

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

Звучит здорово, но у Page-Class нет контента ContentRendered-Event? – Bogey

+0

Я не думаю, что это служит требованию. Некоторые элементы управления могут быть добавлены после завершения события загрузки, например, элементы управления, добавленные после события клика. – gouderadrian

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 

Это позволяет странице загрузки (в отдельном потоке, может быть?), А также показывает MessageBox.

Смежные вопросы