в WPF, возвращаясь обратно в MainWindow после установки содержимого в другом месте

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

Однако вы не можете сделать это в WPF, поэтому вместо этого я устанавливаю содержимое главной страницы на содержимое созданного объекта.

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

Помогите пожалуйста, я ОЧЕНЬ запутался!

Подробнее...

Извините, это не самый четкий вопрос. В моем mainWindow у меня есть

Page1 mainMenu = new Page1();

this.Content = mainMenu;

Это вызывает мою новую страницу, как новое окно, но без фактической загрузки нового окна, что на самом деле здорово!

Однако моя текущая страница теперь имеет содержимое Page1. Таким образом, он запускает код и отображает содержимое со страницы Page1.

На первой странице, как мне вернуть содержимое обратно в MainWindow? Я пробовал много вещей, которые по существу получают ошибку -

«При обходе дерева превышена глубина логического дерева. Это может указывать на цикл в дереве».


person MichaelMcCabe    schedule 28.07.2011    source источник
comment
Непонятно, что именно вы пытаетесь сделать - возможно, если вы опубликовали код (или псевдокод) того, как вы это сделаете в Windows Forms, кто-то может помочь вам сделать то же самое в WPF.   -  person E.Z. Hart    schedule 28.07.2011


Ответы (4)


«По сути, как и в форме Windows, я создаю новый объект страницы, а затем отображаю его. Однако вы не можете сделать это в WPF, поэтому вместо этого.» Это утверждение/вопрос расплывчато. Вы знаете, что можете открыть страницу в NavigationWindow?

    NavigationWindow win = new NavigationWindow();
    win.Content = new pageWFbchAdmin();
    win.Show();
person paparazzo    schedule 28.07.2011

Page обычно используется в Frame или NavigationWindow. Там у вас есть возможность перемещаться между страницами.

Ваш код заменил содержимое окна, и в окне нет функций навигации. Что вы можете сделать, так это открыть новое окно и закрыть текущее или установить другое содержимое в свойство Content вашего окна.

ИМО, вы смешиваете разные технологии пользовательского интерфейса. Если вы хотите создать браузероподобное приложение, просмотрите NavigationWindow или Frame -класс. В противном случае, возможно, лучше использовать не объект Page, а UserControls. Возможно, это ссылка вам поможет.

person HCL    schedule 28.07.2011
comment
Вы. Объект страницы в этом случае, поэтому нет метода Close(), как я ожидал - person MichaelMcCabe; 28.07.2011
comment
Кроме того, «App.Current.MainWindow» выдает ошибку, которую я указал в своем редактировании вопроса. - person MichaelMcCabe; 28.07.2011
comment
@MichaelMcCabe: вы можете получить окно объекта Page с помощью Window.GetWindow(yourPageInstance). Может быть, это поможет вам? - person HCL; 28.07.2011
comment
@MichaelMcCabe: я изменил свой ответ. Надеюсь, это поможет. - person HCL; 28.07.2011

Возможно, я неправильно понял, что вы пытаетесь сделать, но мне интересно, действительно ли вы хотите сделать свою страницу окном, а затем показать ее с помощью метода Window.ShowDialog.

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

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

person IanR    schedule 28.07.2011

У Page может не быть метода Close, но у NavigationWindow есть метод Close. Страница — это контент (а не визуальный хост).

person paparazzo    schedule 29.07.2011