KNOW INTUIT, Лекция, Създаване на WPF приложения

Упражнение 3: Множество прозорци в WPF

Едно и също приложение може да създаде няколко прозореца, които могат да бъдат отворени едновременно. Ако към тези прозорци не е зададен собственик, те ще останат отворени, когато родителският прозорец бъде затворен. Това може да се провери и в последния пример, като изпълните следното

  • Заменете модалния код за отваряне на прозорец в манипулатора LifeEvents() на файла Window0.axml.cs с wnd1.ShowModal() ; на wnd1.Show() ;
  • Стартирайте приложението и от Window0 отворете няколко екземпляра на Window1, след което затворете Window0

След такива действия всички дъщерни прозорци остават отворени и трябва да се затворят ръчно (освен ако не сме ги стартирали изпод обвивката). Освен това иконите на прозорци не се показват в лентата на задачите и ако покрием екрана с друг прозорец, тогава тези прозорци ще трябва да бъдат затворени или чрез минимизиране на всички останали прозорци, или чрез диспечера на задачите.

know

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

  • Добавете нов WPF проект с име WpfApp3 към решението и го задайте като начален проект

създаване

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

създаване

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

създаване

Въпреки това, всички прозорци, отворени от приложението, все още трябва да бъдат затворени ръчно. Има два начина за решаване на този проблем:

  1. Определете един от отворените прозорци като основен прозорец, като зададете свойството Application.Current.MainWindow на препратка към този прозорец
  2. Използвайте метода Application.Current.Shutdown().

Коя от тези две опции ще работи се определя от свойството Application.Current.ShutdownMode. Може да приеме една от следните стойности на едноименното изброяване:

  1. ShutdownMode.OnLastWindowClose - затворете приложението при затваряне на последния прозорец (зададено по подразбиране)
  2. ShutdownMode.OnMainWindowClose - затворете приложението, когато главният прозорец е затворен
  3. ShutdownMode.OnExplicitShutdown - затворете приложението само когато методът Shutdown() е изрично извикан

Приложение в режим ShutdownMode.OnExplicitShutdown може да бъде затворено само чрез метода Shutdown(), но в предишните два режима методът Shutdown() винаги работи.

Нека опитаме и двата метода. За промяна, нека да направим основния прозорец на номер 3 и да добавим бутон за извикване на метода Shutdown() към всички прозорци.