Закрыть страницу в рамке в WPF

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

  private void closebt_MouseDown(object sender, MouseButtonEventArgs e)
     {
        var main = new MainWindow();
       main.Exitbt_PreviewKeyDown(main.Exitbt, e);

     }

и вот код в главном окне

 internal void Exitbt_PreviewKeyDown(object sender, MouseButtonEventArgs e)
      {
         ProjectorFrame.Content = "";
         MessageBox.Show("done");
      } 

Хотя сообщение показывают, но это не закрытая страница, пожалуйста, помогите мне.

1 ответ

Решение

Я не знаю, почему вы создаете еще один экземпляр MainWindow внутри инструмента closebt_MouseDown, но я надеюсь, что следующий код будет вам полезен:

private void closebt_MouseDown(object sender, MouseButtonEventArgs e)
{
    MainWindow main = Application.Current.MainWindow as MainWindow;
    if (main != null)
    {
        main.Exitbt_PreviewKeyDown(main.Exitbt, e);
        main.Close();
    }
}

Отредактировано:

Я предположил, что основной объект Window вашего приложения MainWindowЯ подумал, что предыдущий код может закрыть окно вашего приложения. Но, как вы прокомментировали, Application.Current.MainWindow отличается от MainWindowи main стал null,

Поэтому я думаю, что простой способ получить основной объект Window - создать следующий конструктор в вашем классе страницы, чтобы сохранить ссылку:

class YourPageClass
{
    public YourPageClass(MainWindow mainWindow)
    {
        main = mainWindow;
    }
    private MainWindow main;

    (snip)
}

Затем создайте этот экземпляр с передачей основного объекта Window:

// somewhere in MainWindow code where instantiate your page object
var page = new YourPageClass(this);

Сделав это, вы можете получить основной объект Window. Теперь вы можете закрыть ваш объект Window следующим образом:

// in YourPageClass code

private void closebt_MouseDown(object sender, MouseButtonEventArgs e)
{
    if (main != null)
    {
        main.Exitbt_PreviewKeyDown(main.Exitbt, e);
        main.Close();
    }
}
Другие вопросы по тегам