Закрыть страницу в рамке в 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();
}
}