KNOW INTUIT, Лекция, Създаване на WPF приложения
Упражнение 3: Множество прозорци в WPF
Едно и също приложение може да създаде няколко прозореца, които могат да бъдат отворени едновременно. Ако към тези прозорци не е зададен собственик, те ще останат отворени, когато родителският прозорец бъде затворен. Това може да се провери и в последния пример, като изпълните следното
- Заменете модалния код за отваряне на прозорец в манипулатора LifeEvents() на файла Window0.axml.cs с wnd1.ShowModal() ; на wnd1.Show() ;
- Стартирайте приложението и от Window0 отворете няколко екземпляра на Window1, след което затворете Window0
След такива действия всички дъщерни прозорци остават отворени и трябва да се затворят ръчно (освен ако не сме ги стартирали изпод обвивката). Освен това иконите на прозорци не се показват в лентата на задачите и ако покрием екрана с друг прозорец, тогава тези прозорци ще трябва да бъдат затворени или чрез минимизиране на всички останали прозорци, или чрез диспечера на задачите.

Това поведение не е съвсем добро, така че дизайнерите на платформата WPF предоставиха подходящите средства в обекта Application. Ще ги разгледаме в това упражнение.
- Добавете нов WPF проект с име WpfApp3 към решението и го задайте като начален проект

- В панела Solution Explorer изтрийте автоматично генерирания файл с име Window1.xaml от проекта WpfApp3 и добавете нов файл с име WindowList.xaml (за да избегнете преименуването на много места)

- Отворете файла App.xaml на проекта WpfApp3 и променете стойността на параметъра StartupUri на обекта Application на името на файла на новия начален прозорец
- Отворете файла WindowList.xaml в XAML View и настройте началния прозорец, както следва
- Уверете се, че са по едно и също времесе създават манипулатори, регистрирани в бутони
- Променете файла WindowList.xaml.cs, както следва
- Стартирайте приложението - то съхранява и показва списък с текущо отворени прозорци

Въпреки това, всички прозорци, отворени от приложението, все още трябва да бъдат затворени ръчно. Има два начина за решаване на този проблем:
- Определете един от отворените прозорци като основен прозорец, като зададете свойството Application.Current.MainWindow на препратка към този прозорец
- Използвайте метода Application.Current.Shutdown().
Коя от тези две опции ще работи се определя от свойството Application.Current.ShutdownMode. Може да приеме една от следните стойности на едноименното изброяване:
- ShutdownMode.OnLastWindowClose - затворете приложението при затваряне на последния прозорец (зададено по подразбиране)
- ShutdownMode.OnMainWindowClose - затворете приложението, когато главният прозорец е затворен
- ShutdownMode.OnExplicitShutdown - затворете приложението само когато методът Shutdown() е изрично извикан
Приложение в режим ShutdownMode.OnExplicitShutdown може да бъде затворено само чрез метода Shutdown(), но в предишните два режима методът Shutdown() винаги работи.
Нека опитаме и двата метода. За промяна, нека да направим основния прозорец на номер 3 и да добавим бутон за извикване на метода Shutdown() към всички прозорци.