none
Можно ли с дочернего окна (объект page) вызвать функцию из родительского окна (объект window)? RRS feed

  • Вопрос

  • Можно ли с дочернего окна (объект page) вызвать функцию из родительского окна (объект window)?

    или имитировать нажатие кнопки в родительском окне?

    2 ноября 2011 г. 9:45

Ответы

  • Здравствуйте.

    Можно, для этого нужно в Page передать ссылку на главное окно. Это можно сделать при загрузке с помощью события Frame.LoadCompleted:

    Есть фрейм, который подписан на обработку события, сам обработчик описан ниже. Передаем ссылку на главное окно в страницу, которая загружена во фрейм:

            private void frame1_LoadCompleted(object sender, NavigationEventArgs e)
            {
                (e.Content as Page).Tag = this;
            }
    

    Далее в самой странице в нужном место получаем ссылку на окно и вызываем необходиму функцию главного окна:

            private void button1_Click(object sender, RoutedEventArgs e)
            {
                (this.Tag as MainWindow).ShowHello("page 1");
            }
    

    В главном окне объявлена открытая функция ShowHello(string page):

            public void ShowHello(string page)
            {
                MessageBox.Show("Hello from " + page);
            }
    

     


    Для связи [mail]
    • Помечено в качестве ответа a_basic_man 3 ноября 2011 г. 13:36
    3 ноября 2011 г. 11:44

Все ответы

  • Здравствуйте.

    Можно, для этого нужно в Page передать ссылку на главное окно. Это можно сделать при загрузке с помощью события Frame.LoadCompleted:

    Есть фрейм, который подписан на обработку события, сам обработчик описан ниже. Передаем ссылку на главное окно в страницу, которая загружена во фрейм:

            private void frame1_LoadCompleted(object sender, NavigationEventArgs e)
            {
                (e.Content as Page).Tag = this;
            }
    

    Далее в самой странице в нужном место получаем ссылку на окно и вызываем необходиму функцию главного окна:

            private void button1_Click(object sender, RoutedEventArgs e)
            {
                (this.Tag as MainWindow).ShowHello("page 1");
            }
    

    В главном окне объявлена открытая функция ShowHello(string page):

            public void ShowHello(string page)
            {
                MessageBox.Show("Hello from " + page);
            }
    

     


    Для связи [mail]
    • Помечено в качестве ответа a_basic_man 3 ноября 2011 г. 13:36
    3 ноября 2011 г. 11:44
  • Большое спасибо

    3 ноября 2011 г. 13:37
  • Ну а как с родительского окна вызвать функцию текущей страницы? Или как с родительского окна заставить текущую страницу обновить данные?  Заранее спасибо.

    19 декабря 2011 г. 3:19