Открыть другое окно внутри текущего окна (WPF)
И так из названия думаю понятно, мне нужно открыть окно внутри окна, есть MainWindow , и SecondWindow , мне нужно открыть SecondWindow в MainWindow . Т.е внутри него, как это сделать? Я как только не пытался, и .ShowDialog() , и устанавливал owner — оно все равно открывает как новое окно, т.е не внутри MainWindow . Помогите пожалуйста, уже пол дня гуглю. Я пробовал такой дикий костыль, который работает, но криво, да он перекрывает форму так как надо, делая иллюзию что действительно окно в окне, но если я вынесу основное окно приложения за край и открою свое псевдо-модальное окно то оно станет на координаты 0 по той плоскости в которой основное окно вышло в минус. Т.е координаты окна основного -25, 300, т.е оно ушло на 25 влево за край экрана, а псевдо-модальное окно будет на 0, 300. Вот код которым я делал костыли из флешек:
var secondWindow = new SecondWindow(); var x = Left; var y = Top; secondWindow.MaxHeight = Height; secondWindow.MaxWidth = Width; secondWindow.Owner = this; secondWindow.ShowDialog(); secondWindow.Left = x; secondWindow.Top = y;
Отслеживать
задан 29 июн 2018 в 16:56
Pavel Erokhin Pavel Erokhin
76 1 1 серебряный знак 10 10 бронзовых знаков
А какой смысл в этом? Можно скрин того, что вы хотите? Ибо окно в окне не очень хорошее решение, а если вы хотите показать другой контент, то там это явно не окнами делается. Если же вам надо сделать всплывающее окно, то сделайте PopUp или что то на подобие, некий контрол поверх остального.
29 июн 2018 в 17:03
@EvgeniyZ Конечно, держите ссылки на скриншоты. Как было и как стало. ссылка / Отвечаю на смысл — так удобнее и как то по нормальному, чем окно на полный экран, ну на скринах видно, что действительно модальное лучше чем на полный экран, да и оно затемняет полный экран, а так только программу. Некий контрол? Не знаю, думаю сначала подумать над тем что бы сделать это в окне. 🙂
Как в wpf перейти на другое окно
Рассмотрим, как мы можем взаимодействовать с несколькими окнами в WPF. Для этого создадим новый проект. По умолчанию он уже содержит одно главное окно MainWindow. Теперь добавим еще одно окно. Для этого в окне добавления нового элемента нам надо выбрать тип «Window (WPF)»:

Назовем его TaskWindow .
Теперь определим на главном окне MainWindow кнопку для открытия нового окна:
Обработчик нажатия кнопки Button_Click будет выглядеть так:
private void Button_Click(object sender, RoutedEventArgs e)
Для открытия нового окна создаем его объект и затем вызываем метод Show() .

При нажатии на кнопку открывается окно TaskWindow.
Используя ссылку на окно, мы можем взаимодействовать с ним, например, передавать ему данные из главной формы или вызывать его методы. Например, изменим код C# класса TaskWindow:
using System.Windows; namespace WindowApp < public partial class TaskWindow : Window < public string ViewModel < get; set; >public TaskWindow() < InitializeComponent(); >public void ShowViewModel() < MessageBox.Show(ViewModel); >> >
Здесь добавлено свойство ViewModel и метод, который отображает его содержимое. Теперь изменим обработчик Button_Click в главном окне MainWindow:
private void Button_Click(object sender, RoutedEventArgs e)
Здесь у окна TaskWindow устанавливается свойство ViewModel и вызывается его метод.
Важно отметить, что после открытия эти окна существуют независимо друг от друга. Мы можем закрыть главное окно MainWindow, и второе окно TaskWindow все равно продолжит свою работу. Однако мы можем задать и другое поведение.
У всех окон есть свойство Owner , которое указывает на главное окно, владеющее текущим окном. Так, изменим обработчик Button_Click в главном окне:
private void Button_Click(object sender, RoutedEventArgs e) < TaskWindow taskWindow = new TaskWindow(); //Теперь MainWindow главное окно для taskWindow taskWindow.Owner = this; taskWindow.Show(); >
Теперь текущий объект MainWindow является владельцем taskWindow. Если, к примеру, мы закроем MainWindow, то закроется и TaskWindow.
Кроме того, мы можем обращаться из TaskWindow к своему владельцу:
public partial class TaskWindow : Window < public void ChageOwnerBackground() < this.Owner.Background = new SolidColorBrush(Colors.Red); >// остальной код >
С другой стороны все зависимые окна доступны в главном окне-владельце через свойство OwnedWindows :
private void Button_Click(object sender, RoutedEventArgs e) < TaskWindow taskWindow = new TaskWindow(); taskWindow.Owner = this; taskWindow.Show(); foreach(Window window in this.OwnedWindows) < window.Background = new SolidColorBrush(Colors.Red); if (window is TaskWindow) window.Title = "Новый заголовок!"; >>
Класс App и свойство Windows
Еще одним способ для взаимодействия с окнами предоставляет класс App — главный класс приложения. Он содержит свойство Windows , которое хранит информацию обо всех открытых окнах приложения. И в любом месте программы мы можем получить эту информацию:
foreach(Window window in App.Current.Windows) < window.Background = new SolidColorBrush(Colors.Red); // если окно - объект TaskWindow if (window is TaskWindow) window.Title = "Новый заголовок!"; >
Как сделать переход с первого окна на второе в WPF?

Как сделать чтобы с первого окна перейти во второе?
Я воспользовался данной подсказкой. А как теперь сделать чтоб с первого окна перейти во второе.
Определить, возможен ли на данном графе переход фишек из первого положения во второе
Имеется ориентированный мультиграф. По его вершинам и рёбрам двигаются фишки. Две фишки не могут.
Из первого окна открываем второе и закрываем первое
Извиняюсь за название топика, но не знал как сформулировать понятнее 🙂 Идея такая. Запускается.

Как сделать, чтобы в форме при заполнении первого поля автоматически заполнялось второе тем же значением
Здравствуйте! имеется форма, необходимо, чтобы при вводе значения в первое поле автоматически.
#7 — Переход между окнами в приложении

Завершающим штрихом нашей программы станет реализация перехода между окнами в приложении. При регистрации или авторизации пользователь будет переходить на новые окна, что будет свидетельствовать про успешную обработку его действий.
Видеоурок
Для перехода между страницами необходимо выполнять две задачи:
- скрывать окно в котором сейчас находитесь;
- открывать новое окно приложения.
Ниже приведен код для реализации подобного функицонала:
this.Hide(); // Скрываем нынешнее окно // Создаем объект на основе определенного окан MainForm mainForm = new MainForm(); // Показываем новое окно mainForm.Show();
Программа обучения
Если вас интересует более углубленное изучение самого языка и его фреймворков, то предлагаем вашему внимаю наш полный курс по изучению C# . За курс вы изучите язык C#, научитесь делать веб проекты на основе ASP NET и строить приложения при помощи WinForms и WPF.