Загрузка данных
1. Создание нового окна (через Visual Studio)
Способ 1: Через контекстное меню
1. В Обозревателе решений (Solution Explorer) кликните правой кнопкой мыши по названию вашего проекта
2. Выберите Add → Window (WPF)
3. Назовите окно, например: SecondWindow.xaml
4. Нажмите Add
Способ 2: Вручную (нужно создать 2 файла)
• SecondWindow.xaml — разметка окна
• SecondWindow.xaml.cs — код (code-behind)
2. Структура созданного окна
SecondWindow.xaml:
<Window x:Class="YourProject.SecondWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Моё окно" Height="300" Width="400">
<Grid>
<!-- Здесь будет содержимое окна -->
</Grid>
</Window>
SecondWindow.xaml.cs:
using System.Windows;
namespace YourProject
{
public partial class SecondWindow : Window
{
public SecondWindow()
{
InitializeComponent();
}
}
}
3. Способы открытия окна
Способ 1: Обычное окно (не блокирует родительское)
SecondWindow secondWindow = new SecondWindow();
secondWindow.Show();
Способ 2: Модальное окно (блокирует родительское)
SecondWindow secondWindow = new SecondWindow();
secondWindow.ShowDialog();
Способ 3: Открытие с владельцем
SecondWindow secondWindow = new SecondWindow();
secondWindow.Owner = this; // this — текущее окно
secondWindow.Show();
Способ 4: Передача данных через конструктор
// В SecondWindow.xaml.cs добавить конструктор:
public SecondWindow(string userName)
{
InitializeComponent();
Title = $"Привет, {userName}!";
}
// Вызов:
SecondWindow secondWindow = new SecondWindow("Алексей");
secondWindow.Show();
4. Закрытие окна
// Закрыть текущее окно
this.Close();
// Закрыть из кода
Close();
5. Передача данных между окнами
Способ A: Через публичное свойство
В главном окне (MainWindow.xaml.cs):
private void OpenButton_Click(object sender, RoutedEventArgs e)
{
SecondWindow secondWindow = new SecondWindow();
secondWindow.ReceivedData = textBoxInput.Text; // Передаём данные
secondWindow.Show();
}
В дополнительном окне (SecondWindow.xaml.cs):
public string ReceivedData { get; set; }
public SecondWindow()
{
InitializeComponent();
Loaded += (s, e) => textBlockDisplay.Text = ReceivedData;
}
Способ B: Через конструктор
Открытие:
SecondWindow secondWindow = new SecondWindow(userName, userAge);
secondWindow.Show();
Приёмник:
public SecondWindow(string name, int age)
{
InitializeComponent();
titleLabel.Content = $"Имя: {name}, Возраст: {age}";
}
6. Полезные свойства окна
Свойство Описание
WindowStartupLocation Центрирование окна (CenterScreen, CenterOwner)
ResizeMode Можно ли изменять размер (CanResize, NoResize, CanMinimize)
WindowState Состояние (Normal, Maximized, Minimized)
Topmost Поверх всех окон (true/false)
ShowInTaskbar Показывать в панели задач
Icon Иконка окна
ЗАДАНИЯ
Задание 1: Окно-приветствие
Тема: Открытие окна по кнопке, передача текста из TextBox.
Техническое задание:
Главное окно:
• Поле TextBox для ввода имени
• Кнопка "Открыть приветствие"
• При нажатии открывается дополнительное окно, куда передаётся введённое имя
Дополнительное окно:
• Заголовок окна: "Приветствие"
• Текст: "Привет, [имя]!"
• Кнопка "Закрыть" — закрывает окно
• Кнопка "Спасибо" — закрывает окно с сообщением "Вы нажали 'Спасибо'!"
Задание 2: Окно-калькулятор
Тема: Передача данных туда и обратно, модальное окно (ShowDialog).
Техническое задание:
Главное окно:
• Два поля TextBox для ввода чисел
• Кнопка "Открыть калькулятор"
• После закрытия калькулятора отображается результат
Дополнительное окно (калькулятор):
• Принимает два числа из главного окна
• Отображает их в метках
• Кнопки: +, -, ×, ÷
• При нажатии на кнопку — производит операцию и закрывается
• Результат передаётся обратно в главное окно и отображается в TextBlock
Дополнительные фишки:
• Обработка деления на ноль
• Проверка, что введены числа (TryParse)
Задание 3: Анкета пользователя
Тема: Сбор данных в дополнительном окне, передача сложного объекта.
Техническое задание:
Главное окно:
• Кнопка "Заполнить анкету"
• После закрытия дополнительного окна — отображение всех данных из анкеты
Дополнительное окно:
• Поля для ввода:
o Фамилия (TextBox)
o Имя (TextBox)
o Возраст (NumericUpDown или TextBox с валидацией)
o Город (ComboBox: Москва, СПб, Новосибирск, Другой)
o Дата рождения (DatePicker)
o Пол (RadioButton: Мужской, Женский)
o Хобби (CheckBox несколько: Спорт, Музыка, Книги, Игры)
• Кнопки: "Сохранить" (закрывает окно и передаёт данные) и "Отмена" (закрывает без сохранения)
Задание 4: Множественные окна — Заметки
Тема: Работа с несколькими окнами, управление коллекцией окон.
Техническое задание:
Главное окно:
• Список (ListBox) всех открытых заметок
• Кнопка "Создать заметку" — открывает новое окно для каждой заметки
• Кнопка "Закрыть все заметки" — закрывает все дополнительные окна
• Label с количеством открытых заметок
Окно заметки (открывается в новом экземпляре):
• Заголовок TextBox
• Текст заметки (TextBox с AcceptsReturn=True)
• Кнопка "Сохранить и закрыть"
• Кнопка "Закрыть без сохранения"
• Заголовок окна = заголовок заметки (обновляется при изменении)
Требования:
• Главное окно должно знать обо всех открытых окнах (List<Window>)
• При закрытии любого окна заметки — обновляется список и счётчик в главном окне
• При закрытии главного окна — все окна заметок тоже закрываются
Дополнительные фишки:
• Возможность редактировать уже созданную заметку (передача ID заметки)
• Сохранение всех заметок в JSON файл перед закрытием
• Загрузка заметок при запуске