Silverlight 4 - Window Closing Event

Window Closing event je nová událost, která se vyvolá v případě uzavření aplikace běžící mimo prohlížeč. K uzavření aplikace může dojít po uživatelově akci (zavření aplikace pomocí křížku v pravém horním rohu) nebo v rámci systému (např. odhlášení). Pokud je původcem uživatel, pak můžeme uzavření aplikace zrušit. Díky této události můžeme vyvolat různé akce, které se vykonají před samotným uzavřením aplikace.

Chceme-li zrušit uzavření aplikace, pak nastavíme vlastnost Cancel na hodnotu true. Vlastnost Cancel je dostupná z parametru ClosingEventArgs. Před samotným nastavením vlastnosti Cancel je dobré zjistit, zda-li uzavření aplikace bylo vyvoláno uživatelem. To zjistíme přes vlastnost IsCancelable, která je dostupná taktéž v rámci parametru ClosingEventArgs.

Ukázka

V této ukázce si ukážeme, jak zamezit uzavření aplikace uživateli. Prezentační vrstva není pro tuto ukázka důležitá, proto se budeme věnovat kódu v pozadí.

Nejprve naší aplikaci nastavme možnost běhu mimo prohlížeč. Klepneme pravým tlačítkem na projekt a vybereme možnost Vlastnosti / Properties. Zde vybereme záložku Silverlight a zaškrtneme možnost běhu mimo prohlížeč / Enable running application out of the browser.

OOB

Nyní přidáme událost Loaded, která je vyvolána při načtení aplikace.To můžeme udělat tak, že se přepneme do XAMLu. Ve vlastnostech se přepneme na události (znak blesku) a vybereme událost Loaded. V poli pro výběr dvakrát klikneme a vygeneruje se nám prázdná metoda reagující na událost Loaded.

EventPropertiesWindows

Nyní se přepneme do dané metody, která reaguje na událost Loaded.

V první řadě zjistíme, zda-li aplikace běží mimo prohlížeč. To vcelku snadno zjistíme přes vlastnost IsRunningOutOfBrowser.

if (Application.Current.IsRunningOutOfBrowser)
    {
    }

Pokud aplikace běží mimo prohlížeč, pak zaregistrujeme událost Closing.

Window app = Application.Current.MainWindow;
app.Closing += (s, args) =>
  {
  };

Do aplikace jsem si přidal jeden checkbox, pomocí kterého budu moci aplikaci uzavřít. V případě, že bude checkbox zaškrtnutý, aplikace bude moci být uzavřena uživatelem.

V rámci události přidáme další podmínku, která zjistí stav checkboxu a také, zda-li uzavření aplikace bylo vyvoláno uživatelem.

if (checkBox1.IsChecked == false && args.IsCancelable)
    {
    }

V podmínce přidáme vlastnost Cancel nastavenou na true. Tím pádem uživatel nebude schopen aplikaci uzavřít.

Celý kód by pak vypadal následovně:

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
    if (Application.Current.IsRunningOutOfBrowser)
    {
        Window app = Application.Current.MainWindow;
        app.Closing += (s, args) =>
        {
            if (checkBox1.IsChecked == false && args.IsCancelable)
            {
                args.Cancel = true;
            }
        };
    }
}

Shrnutí

  • Událost Closing pro detekci uzavření aplikace běžící mimo prohlížeč
  • Vlastnost IsCancelable zjistí původce uzavření aplikace
  • Vlastnost Cancel nastavená na hodnotu true znemožní uzavření aplikace
  • Vlastnost Cancel pouze v případě, že původcem uzavření je uživatel

 

Ohodnoťte článek: starstarstarstarstar

Komentáře

Přidat komentář

jméno

text komentáře

opište text z obrázku


O autorovi

David Beinhauer

David Beinhauer

Působí jako Microsoft Student Partner a pracuje jako vývojář v jedné nadnárodní firmě. Zajímá se o webové technologie a počítačovou grafiku. Pozornost také věnuje hernímu průmyslu

web: www.aglight.cz

©2010 | David Beinhauer | Lukáš Kubis