Ablakok, erőforrások
5. előadás
ESEMÉNYVEZÉRELT PROGRAMOZÁS © Bánsághi Anna
[email protected]
5. ELŐADÁS - ABLAKOK, ERŐFORRÁSOK
2015 © Bánsághi Anna
1 of 31
Ablakok, erőforrások
5. előadás
TEMATIKA I. C# áttekintés II. WPF
2015 © Bánsághi Anna
2 of 31
Ablakok, erőforrások
5. előadás
II. WPF 1. WPF alkalmazás fejlesztés 2. Ablakok 3. Erőforrások
2015 © Bánsághi Anna
3 of 31
Ablakok, erőforrások
5. előadás
1. ALKALMAZÁS a WPF keretrendszer lehetővé teszi a következő fajta alkalmazások és könyvtárak fejlesztését: több ablakból álló desktop kliens alkalmazások több oldalból álló böngésző alapú alkalmazások egyéni fejlesztésű vezérlő könyvtárak (újrafelhasználható, nem futtatható assembly-k) egyéni fejlesztésű osztálykönyvtárak (újrafelhasználható, nem futtatható assembly-k)
2015 © Bánsághi Anna
4 of 31
Ablakok, erőforrások
5. előadás
WPF SZOLGÁLTATÁSOK a fejlesztést számos WPF szolgáltatás teszi lehetővé alkalmazás menedzsment erőforrások, tartalom és adatfájlok kezelése ablakok és dialógus dobozok navigáció
2015 © Bánsághi Anna
5 of 31
Ablakok, erőforrások
5. előadás
ALKALMAZÁS MENEDZSMENT az Application osztály számos feladatot lát el: az alkalmazás infrastruktúra létrehozása és kezelése (belépési pont, rendszer és bemenő üzenetek kezelése) az alkalmazás életciklus nyomonkövetése parancssori paraméterek feldolgozása alkalmazás szintű tulajdonságok és erőforrások megosztása kezeletlen kivételek detektálása és feldolgozása ablakok / oldalak és az azok közötti navigáció kezelése kilépési kód visszaadása
2015 © Bánsághi Anna
6 of 31
Ablakok, erőforrások
5. előadás
DESKTOP ALKALMAZÁS ÉLETCIKLUSA
2015 © Bánsághi Anna
7 of 31
Ablakok, erőforrások
5. előadás
BÖNGÉSZŐ ALKALMAZÁS ÉLETCIKLUSA
2015 © Bánsághi Anna
8 of 31
Ablakok, erőforrások
5. előadás
2. ABLAKOK, DIALÓGUS DOBOZOK a felhasználó ablakokon keresztül kommunikál az alkalmazással az alkalmazás tartalma az ablakokban jelenik meg, az alkalmazás funkcionalitása az ablakokon keresztül érhető el a Windows osztály feladatai: ablakok létrehozása és láthatóvá tétele az ablakok közötti tulajdonos / tulajdon reláció kiépítése az ablakok megjelenésének konfigurációja az ablak életciklus nyomonkövetése
2015 © Bánsághi Anna
9 of 31
Ablakok, erőforrások
5. előadás
DIALÓGUS DOBOZOK a Window osztály lehetővé teszi speciális ablakok, ún. dialógus dobozok származtatását modal dialógus dobozok felhasználói beavatkozás után engedik a programot tovább futni, általában OK és Cancel gombokkal modeless dialógus dobozok nem állítják meg a program futását, hanem megengedik más ablakokon a felhasználói tevékenységek végrehajtását
2015 © Bánsághi Anna
10 of 31
Ablakok, erőforrások
5. előadás
ABLAKOK JELLEMZŐI - WINDOW CLASS az ablakokban megjelenő tartalom függ az alkalmazás által kezelt adatoktól, ami lehet például média, XAML oldal, web oldal, dokumentum, adatbázis elem, rendszer információ
2015 © Bánsághi Anna
11 of 31
Ablakok, erőforrások
5. előadás
ABLAK TERÜLETEK nem-kliens terület a WPF által implementált általános ablak részek kliens terület a fejlesztő által használható terület az alkalmazás specifikus tartalom megjelenítésére
2015 © Bánsághi Anna
12 of 31
Ablakok, erőforrások
5. előadás
MARKUP ELEMEK INICIALIZÁLÁSA az InitializeComponent metódust a markup-beli részleges osztály implementálja, és a markup-ban definiált tulajdonságok beállítása és események regisztrálása történik namespace Nevter { public partial class Ablak : Window { public Ablak { InitializeComponent(); } } }
2015 © Bánsághi Anna
13 of 31
Ablakok, erőforrások
5. előadás
ABLAK ÉLETCIKLUSA megnyitás aktiválás bezárás
2015 © Bánsághi Anna
14 of 31
Ablakok, erőforrások
5. előadás
ABLAKOK MEGNYITÁSA <Application x:Class ="Nevter.Alkalmazas" xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml" Startup ="app_Startup"> ...
namespace Nevter { public partial class Alkalmazas : Application { void app_Startup( object sender, StartupEventArgs e ) { // az első példányosított ablak lesz az alkalmazás főablaka (MainWindow) var foablak = new Ablak(); // ablak megnyitása modeless módban foablak.Show(); } } }
2015 © Bánsághi Anna
15 of 31
Ablakok, erőforrások
5. előadás
AUTOMATIKUS FŐABLAK SPECIFIKÁLÁS <Application x:Class ="Nevter.Alkalmazas" xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri ="Ablak.xaml"> ...
namespace Nevter { public partial class Alkalmazas : Application {} }
2015 © Bánsághi Anna
16 of 31
Ablakok, erőforrások
5. előadás
ABLAKOK TULAJDONJOGAI két ablak között nincs kapcsolat, hacsak azt külön meg nem adjuk az egymással összehangoltan működő ablakok között beállítható egy tulajdonjogi viszony namespace Nevter { public partial class Ablak : Window { public Ablak { InitializeComponent(); var tulajdonbanlevoAblak = new Window(); tulajdonbanlevoAblak.Owner = this; // ezen ablak objektum a tulajdonos tulajdonbanlevoAblak.Show(); } } }
2015 © Bánsághi Anna
17 of 31
Ablakok, erőforrások
5. előadás
ABLAKOK AKTIVÁLÁSA egy alkalmazásban egyszerre egy ablak lehet aktív aktiválás az ablak első megnyitásakor aktív ablakká válik, felfogja a felhasználói bemeneteket, kiváltja az Activated eseményt deaktiválás egy másik ablak aktiválásakor az addig aktív ablak deaktívvá válik, és kiváltja a Deactivated eseményt, miközben az új aktív ablak az Activated eseményt egy deaktivált ablak is futtathat kódot, sőt, néha kifejezetten erre van szükség
2015 © Bánsághi Anna
18 of 31
Ablakok, erőforrások
5. előadás
ABLAK BEZÁRÁSA egy ablak bezárását a nem-kliens terület különféle elemein hívott Close metódus teszi lehetővé, mely két eseményt vált ki: Closing ezen esemény alatt az ablak bezárás még megakadályozható, pl. nem mentett adatok esetén Closed ha a Closing esemény kezeletlen maradt, vagy nem lett megszakítva a bezárás, akkor váltódik ki a Closed esemény
2015 © Bánsághi Anna
19 of 31
Ablakok, erőforrások
5. előadás
ABLAKOK TULAJDONSÁGAI a képernyőn az ablak elhelyezkedése a Left és Top koordinátákkal szabályozható a Topmost tulajdonsággal szabályozható, hogy melyik legyen a legfelső ablak az ablak mérete a SizeToContent, Widht, Height, MinWidht, MinHeight tulajdonságokkal szabályozható az ablak háromféle állapotban lehet: Normal, Maximized, Minimized a nem-kliens terület megjelenését elsősorban a WindowStyle tulajdonság beállításával szabályozhatjuk
2015 © Bánsághi Anna
20 of 31
Ablakok, erőforrások
5. előadás
DIALÓGUS DOBOZOK egy desktop alkalmazás általában egy főablakból áll, amely egyrészt megjeleníti az alkalmazásban kezelt adatokat, másrészt felhasználói felületet (menük, eszköztárak, státuszsor) biztosít ezen adatok feldolgozásához a főablak mellett dialógus dobozok használhatók speciális információ megjelenítésére vagy információ gyűjtésére a WPF különféle dialógus dobozok létrehozását teszi lehetővé, továbbá saját osztályokat is definiálhatunk
2015 © Bánsághi Anna
21 of 31
Ablakok, erőforrások
5. előadás
BEÉPÍTETT DIALÓGUS DOBOZOK szöveges információ megjelenítésére, és gombokkal vezérelhető döntés meghozatalára szolgál a speciális üzenet doboz: MessageBox az újrafelhasználhatóság és a konzisztens felhasználói élmény támogatására szolgálnak az általános dialógus dobozok: OpenFileDialog SaveFileDialog PrintDialog
2015 © Bánsághi Anna
22 of 31
Ablakok, erőforrások
5. előadás
MESSAGEBOX var eredmeny = MessageBox.Show( "üzenet szövege", "ablak címe", MessageBoxButton gombok, // a megjelenítendő gombok, pl. YesNoCancel MessageBoxImage ikon // a szöveg melletti ikon típusa, pl. Warning ); // ... switch( eredmeny ) { case MessageBoxResult.Yes: // a felhasználó a Yes gombot nyomta meg, a teendő kódja ... break; case MessageBoxResult.No: // a felhasználó a No gombot nyomta meg, a teendő kódja ... break; case MessageBoxResult.Cancel: // a felhasználó a Cancel gombot nyomta meg, a teendő kódja ... break; }
2015 © Bánsághi Anna
23 of 31
Ablakok, erőforrások
5. előadás
3. ERŐFORRÁSOK az alkalmazás tetszőleges pontjáról elérhető objektumok XAML erőforrások stílusok, sablonok, adatok adat fájlok nem futtatható tartalom, erőforrás vagy adat fájlok
2015 © Bánsághi Anna
24 of 31
Ablakok, erőforrások
5. előadás
XAML ERŐFORRÁSOK létrehozhatók mind a markup, mind a code-behind fájlban minden FrameworkElement típusú elemnek van egy Resources attribútuma, az ún. ResourceDictionary, melyben kulcs - érték párokként definiálhatók az erőforrás objektumok valamely elemen definiált erőforrás az elemből és annak részfájából érhető el az alkalmazásra globális erőforrásokat az Application elemben, valamely ablakra vagy vezérlőre lokális erőforrásokat az adott ablakban vagy vezérlőben definiáljuk
2015 © Bánsághi Anna
25 of 31
Ablakok, erőforrások
5. előadás
ERŐFORRÁSOK HIVATKOZÁSA minden erőforrásnak rendelkeznie kell egyedi kulccsal, melyet az x:Key direktívában explicite rögzíthetünk a definiált erőforrásra az egyedi kulcsán keresztül hivatkozunk <Window.Resources> <sys:String x:Key="gombFelirat">Hello, world!
<Button Content="{StaticResource gombFelirat}" />
this.Resources["gombFelirat"] = "Valami más szöveg";
2015 © Bánsághi Anna
// this = Window
26 of 31
Ablakok, erőforrások
5. előadás
STÍLUS ERŐFORRÁS PÉLDA <Window.Resources> <Style TargetType="Button" x:Key="pirosGomb"> <Setter Property="Background" Value="Red" /> <Setter Property="Foreground" Value="White" />
<Button Style="{StaticResource pirosGomb}" Content="Hello" />
2015 © Bánsághi Anna
27 of 31
Ablakok, erőforrások
5. előadás
ERŐFORRÁSOK KERESÉSE a XAML betöltő a vezérlők logikai fáján először a legközelebbi csomóponthoz rendelt erőforrásokat keresi és tölti be ha nem talált, akkor megy tovább felfelé a fán, és ha talál a kiinduló vezérlőn tartozó erőforrást, akkor betölti ha nem talált sehol betölthető erőforrást, akkor végül eljut az Application gyökérhez, és az ahhoz rendelt (alapértelmezett) erőforrásokat tölti be
2015 © Bánsághi Anna
28 of 31
Ablakok, erőforrások
5. előadás
ERŐFORRÁS FAJTÁK statikus egyszer, a XAML betöltésekor kerülnek feloldásra a referenciák <Button Background="{StaticResource hatterszin}" Content="Hello" />
dinamikus csak akkor kerülnek feloldásra a referenciák, amikor azokra szükség van, illetve amikor az erőforrás megváltozik <Button Background="{DynamicResource hatterszin}" Content="Hello" />
2015 © Bánsághi Anna
29 of 31
Ablakok, erőforrások
5. előadás
ERŐFORRÁS KULCSOK explicit a programozó által megadott kulcs implicit a kulcs egy másik tulajdonság értékéből automatikusan áll elő (pl. stílusok) <Window.Resources> <Style TargetType="Button"> <Setter Property="Background" Value="Red" /> <Setter Property="Foreground" Value="White" /> <Button Content="Hello" />
2015 © Bánsághi Anna
30 of 31
Ablakok, erőforrások
5. előadás
ERŐFORRÁS FÁJLOK az erőforrásokat kiemelhetjük egy vagy több önálló XAML fájlba, majd a kívánt alkalmazásokaban hivatkozhatunk a fájlokra <Window.Resources>
2015 © Bánsághi Anna
31 of 31