Предыдущая лекция |   | Следующая лекция :----------------:|:----------:|:----------------: [Стили, триггеры и темы](./wpf_style.md) | [Содержание](../readme.md#тема-8-оконные-приложения) | [Создание окон. Модальные окна](./wpf_window.md) # Создание окна Более менее сложные проекты не помещаются в одно окно. WPF позволяет добавлять дополнительные окна в проект, либо использовать технологию со страницами (а-ля браузер). На этой лекции реализуем первый вариант - создание дополнительного окна и выведем в него подробную информацию об объекте. >Вспоминаем, что мы должны соблюдать файловую структуру проекта, т.е. все однотипные объекты распихивать по соответствующим папкам. Создадим папку `Windows` в проекте и в неё добавим окно: ![](../img/01071.png) Название окна должно быть осмысленным и с суффиксом *Window*. У меня получилось *DetailWindow* Можно в каталог `Windows` перетащить и главное окно **MainWindow**. Только в этом случае надо в разметке приложения (`App.xaml`) добавить название каталога: ```xml ^^^^^^^^ ... ``` Опять же, все окна должны иметь нормальные заголовки. В разметке окна поменяйте атрибут *Title* элемента **Window** (это надо сделать и для основного окна) Верстку я расписывать не буду - придумайте сами (при выводе списка объектов "плиткой" мы показываем только основную информацию об объекте, в окне с детальной информацией можно показать всё). В коде окна `DetailWindow.xaml.cs` в конструктор добавьте параметр: ```cs // для получения данных из класса окна нам // нужно СВОЙСТВО, определяем его public Cat currentCat {get; set;} // конструктор класса окна public DetailWindow(Cat currentCat) ^^^^^^^^^^^^^^ { InitializeComponent(); // и инициализируем в конструкторе this.currentCat = currentCat; } ``` Для открытия окна с детальной информацией будем использовать двойной клик на элементе списка в основном окне (обработчик события _MouseDoubleClick_ добавьте в **ListBox** самостоятельно) ```cs private void caListBox_MouseDoubleClick( object sender, MouseButtonEventArgs e) { // в создаваемое окно передаем выбранного котика var detailWindow = new DetailWindow( catListBox.SelectedItem as Cat); detailWindow.ShowDialog(); } ``` Метод _ShowDialog_ открывает **модальное** окно (пока оно открыто фокус ввода не может вернуться на основное окно). Если модальность не важна (логика задачи допускает открытие нескольких окон), то можно использовать метод _Show_. Добавьте в окно с детальной информацией кнопку "OK" и добавьте ей свойство `IsCancel="true"`, чтобы окно закрывалось по клавише "Escape". --- ## Задание 1. Добавьте в модель **Cat** свойства: - _есть прививка_ (**Boolean**) - _дата прививки_ (**DateTime**) 1. Выведите в модальном окне все поля модели **Cat**. - Поле _есть прививка_ отображать чекбоксом, - поле _дата прививки_ отображать только если _есть прививка_ (использовать аттрибут _Visibility_), - содержимое поля _дата прививки_ выводить используя конвертер