V 1.0 Programozás III. Grafikus felület API-k és összehasonlításuk WPF Hello World Fontosabb UI-elemek UI-elemek tartalommodelljei UI-elemek öröklődési lánca
V 1.0ÓE-NIK, 2014 Hallgatói tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendő anyag vázlatát képezik. Ismeretük szükséges, de nem elégséges feltétele a sikeres zárthelyinek, illetve vizsgának. Sikeres zárthelyihez, illetve vizsgához a jelen bemutató tartalmán felül a kötelező irodalomként megjelölt anyag, a gyakorlatokon szóban, illetve a táblán átadott tudnivalók ismerete, valamint a gyakorlatokon megoldott példák és az otthoni feldolgozás céljából kiadott feladatok önálló megoldásának képessége is szükséges.
V 1.0ÓE-NIK, 2014 (Csak desktop alkalmazásokhoz alkalmas API-k vannak listázva) Grafikus felület API-k API: Application Programming Interface GUI felületeinket általában nem magunk nulláról programozzuk –A játékok gyakori ellenpélda Felépítésükhöz kívülről biztosított API-kon keresztül elérhetünk kész építőköveket/eszközöket –MFC(Windows/C++) –Windows Forms(Windows/.NET) –Java AWT/Swing(Java) –Cocoa(Mac OS X) –QT(főleg Unixok) –GTK/GTK+(főleg Unixok) –WPF(Windows/.NET) –Windows Runtime (Metro)(Windows/C#, C++) 3
V 1.0ÓE-NIK, 2014 Grafikus felület API-k / Windows Forms.NET 1.0-től (2002) –Gyakorlatilag csak natív Windows API elemekhez biztosít menedzselt hozzáférést. –Windows API: Windows 1.0-tól (1985) Egyszerű, klasszikus kinézetű felületek Funkcionalitás: csak GUI –Ablakok készítése és menedzselése –Ablakok felépítéséhez szükséges komponensek (gombok, szövegdobozok, scrollbar-ok stb.) –Dialógusablakok –Egér és billentyűzet input kezelése –Stb. 4
V 1.0ÓE-NIK, 2014 Grafikus felület API-k / WPF.NET 3.0-tól (2006) Windows Forms lecserélésére szánták –Csak félig sikeres! (2014-es állapot) Grafikus alkalmazások fejlesztésének (szinte) minden aspektusához egységes hozzáférést, logikát biztosít –Felhasználói felület felépítése (mint Windows Forms) –2D grafika –3D grafika –Multimédia/videó –Stb. 5
V 1.0ÓE-NIK, 2014 Grafikus felület API-k / Windows Runtime Metro: design elvek, designnyelv (Metro -> Modern - > Windows Store/Windows 8) Modális, teljes képernyőt elfoglaló, nagyon egyszerű grafikájú felületek –Elsősorban kis képernyőjű, hordozható eszközökön előnyös 6
V 1.0ÓE-NIK, 2014 Windows Forms vs. WPF 7 Windows FormsWPF Egyszerű grafikus alkalmazások készítéséhez „Rich desktop apps” Gazdag grafikájú, multimédiás alkalmazásokhoz Viszonylag kötött bevett megoldások Szinte mindenre többféle megoldás A nagyon alapnál több funkcionalitáshoz már külső könyvtárak igénybevétele szükséges (ezek használatának logikája teljesen eltérő lehet!) Nagyon sok eszközhöz biztosít elérést és egységes logikát Nagyon régi, kiforrott, minden hibája ismert Nemrég még jelentős fejlesztés alatt, hibák megoldására még most is alakulnak a bevett módok Könnyen tanulhatóNehezen tanulható
V 1.0ÓE-NIK, 2014 Melyiket? windows-8/ (2013. február 22.) windows-8/ Jelenleg a WPF a legjobb lehetőségünk asztali fejlesztéshez – WinForms, ha gyors prototipizálás kell, vagy létező projektben, vagy ha a csapat csak azt ismeri 8
V 1.0ÓE-NIK, 2014 Jövő (2014) ? Windows Forms támogatása örökéletűnek várható, de már nem fejlesztik WPF jövője kérdéses, fejlesztése lassú XAML viszont túlél, fejlődik A Microsoftnak a grafikus felület tervezésében tett következő lépésétől függ minden 9
V 1.0ÓE-NIK, 2014 WPF Hello World 10
V 1.0ÓE-NIK, 2014 WPF Hello World 11
V 1.0ÓE-NIK, 2014 WPF Hello World View -> View -> Other Windows -> 12
V 1.0ÓE-NIK, 2014 WPF Hello World Projektbeállítások –Fordítási beállítások –Fordítás előtti és utáni események –Parancssori argumentumok –Felhasználói/alkalmazásszintű beállítások –Stb. Hivatkozások –Keretrendszeri vagy harmadik fél által készített könyvtárakra Alkalmazás fájljai Ablak fájljai 13
V 1.0ÓE-NIK, 2014 App, MainWindow App osztály: –App.xaml.cs + generált bin/obj/App.g.cs = App osztály –A Main függvény alapértelmezésben ide generálódik, benne példányosít egyet ebből az osztályból és megjeleníti a főablakot –Alkalmazásunkat reprezentálja: Current statikus tagban van tárolva egy mindig elérhető példány. Startup, Exit események, Shutdown() függvény a bezáráshoz (App.Current.Shutdown()) MainWindow osztály: –Egy ablakot reprezentál (alapbeállítás szerint ez a „főablak”, de ez módosítható) –MainWindow.xaml.cs + generált bin/obj/MainWindow.g.cs = MainWindow osztály –InitializeComponent() függvény generálódik bele, amiben betölti a XAML fájlt 14
V 1.0ÓE-NIK, 2014 WPF Hello World Felhasználói felület XAML nyelvű leírása és designer 15
V 1.0ÓE-NIK, 2014 WPF Hello World Ablak mögöttes kód (code-behind) fájlja 16
V 1.0ÓE-NIK, 2014 WPF Hello World A kijelölt felhasználóifelületelem-példány tulajdonságai a Properties ablakban szerkeszthetők 17
V 1.0ÓE-NIK, 2014 Toolbox Vezérlők –Felhasználói interakcióhoz Egyszerű grafikai elemek Ablakkereteket kiegészítő elemek –Menü, eszközkészlet, státuszsor… Tartalommenedzserek –Elemek csoportosítására, méretezés kezelésére Stb. 18
V 1.0ÓE-NIK, 2014 Egyszerű vezérlők Button (nyomógomb) –Content tulajdonság tartalmazza a szöveget (?) –Click esemény Label (szöveg) –Content tulajdonság tartalmazza a szöveget(?) CheckBox (jelölőnégyzet) –Content tulajdonság tartalmazza a szöveget (?) –IsChecked tulajdonság tartalmazza, hogy be van-e jelölve –Checked/Unchecked események RadioButton (rádiógomb) –Content tulajdonság tartalmazza a szöveget (?) –GroupName csoportosítja, de enélkül is biztosít a csoportosításra logikát –IsChecked –Checked/Unchecked események 19
V 1.0ÓE-NIK, 2014 Egyszerű vezérlők TextBlock (szöveg II) –Text tulajdonságban van a szöveg TextBox (szövegbeviteli mező) –Text tulajdonságban van a szöveg –TextChanged esemény GroupBox (csoportosító doboz) –Header tartalmazza a fejléc szövegét –Content tulajdonságban van a tartalom Stb. 20
V 1.0ÓE-NIK, 2014 Listavezérlők ListBox (lista) –Items tulajdonság tartalmazza az elemeket –SelectionChanged esemény ComboBox (legördülő lista) –Items tulajdonság tartalmazza az elemeket –SelectionChanged esemény TreeView + TreeViewItem (fanézet) –Items tartalmazza az elemeket Ha TreeViewItem van benne, azon belül is Items tartalmazza az elemeket, Header a szöveget 21
V 1.0ÓE-NIK, 2014 Vezérlők tartalommodelljei ContentControl: –Egyetlen elemet tartalmazhat. (Content tulajdonság) HeaderedContentControl: egy elemet és egy fejlécet tartalmaz. ItemsControl: –Több elemet tartalmazhat. (ItemsSource / Items tulajdonságok) HeaderedItemsControl: több elemet és headereket tartalmaz. 22
V 1.0ÓE-NIK, 2014 UI-elemek öröklési lánca System.Windows.Media.Visual: –Renderelés támogatása, transzformációk, találattesztelés, befoglaló téglalap, koordináta- transzformációk… System.Windows.UIElement: –Input, elrendezés, fókusz támogatása, eseménykezelés System.Windows.FrameworkElement: –Adatkötés (stb.) 23
V 1.0ÓE-NIK, 2014 UI-elemek öröklési lánca System.Windows.Controls.Control: –Vezérlők ősosztálya: főként a vezérlők kinézetének teljes cserélhetőségét támogatja. Alapvető beállítások a vezérlőn (Background, BorderThickness, BorderBrush, FontFamily, FontSize stb), amiket a vezérlő kinézetét meghatározó ControlTemplate használ fel (Template tulajdonság). ControlTemplate hiányában a tulajdonságoknak nincs funkciója! 24
V 1.0ÓE-NIK, 2014 UI-elemek öröklési lánca System.Windows.Controls.ContentControl: –Felhasználóifelület-elemek lehetséges tartalommodelljeinek egyike: egyetlen elemet tartalmazhat (Content tulajdonság). A Content tetszőleges típusú lehet (Object), nagyon sokszor string vagy UIElement-utód. Felhasználóifelület-elemek egymásba építése nagyon gyakori használati mód 25
V 1.0ÓE-NIK, 2014 UI-elemek öröklési lánca ContentControl leszármazottak (nem feltétlenül közvetlen): –Button –CheckBox –Label –RadioButton –… –Window 26
V 1.0ÓE-NIK, 2014 UI-elemek öröklési lánca System.Windows.Controls.ItemsControl: –Felhasználóifelület-elemek lehetséges tartalommodelljeinek egyike: több elemet tartalmazhat (Items, ItemsSource tulajdonság). –Items: ItemCollection típusú – Object elemeket fogad –ItemsSource: IEnumerable Egyszerre csak az egyiket használjuk – ha ItemsSource-ot, akkor az Items fix méretű és read-only lesz. ItemsSource csak akkor használható, ha az Items üres. 27
V 1.0ÓE-NIK, 2014 UI-elemek öröklődési lánca ItemsControl leszármazottak (nem feltétlenül közvetlen): –ComboBox –ListBox –ListView –Menu –TreeView –… 28
V 1.0ÓE-NIK, 2014 Elemek elrendezése HorizontalAlignment –Elem vízszintes rendezése a tartalmazóján belül VerticalAlignment –Elem függőleges rendezése a tartalmazóján belül Margin: távolság az objektum körül Height, Width Ezek a beállítások kölcsönhatásban vannak, együtt alakítják ki az objektum elhelyezkedését (pl. …Alignment+Margin, Height+VerticalAlignment, Width+HorizontalAlignment…) 29
V 1.0ÓE-NIK, 2014 Tartalommenedzserek Céljuk az elemek meghatározott szabályok szerinti elrendezése és átméretezés kezelése – saját grafikus megjelenésük nincs! Grid (elemek rácsszerű elrendezésére) Canvas (elemek adott pixelre való elhelyezésére) DockPanel (igazított elhelyezés) StackPanel (elemek egymás utáni elhelyezése) WrapPanel (elemek egymás utáni elhelyezkedése, lapozással) –Mindegyiknek Children tulajdonsága tartalmazza az elemeket Grid: StackPanel: 30
V 1.0ÓE-NIK, 2014 UI-elemek öröklődési lánca System.Windows.Controls.Panel: –A tartalommenedzserek a Panel osztály utódai –Children: UIElementCollection típusú – UIElement típusú elemeket fogad 31
V 1.0ÓE-NIK, 2014 WPF Hello World II. 32
V 1.0ÓE-NIK, 2014 WPF Hello World II. Eseménykezelés –A vezérlők (később pontosítjuk!) eseményeire való feliratkozást a Properties ablakban (villám ikon) lehet megtenni –Kettős kattintással új eseménykezelő jön létre a code-behind fájlban, és megtörténik a feliratkoztatás az eseményre –Törlés és enter után a feliratkozás törlődik, a létrejött függvény nem! (Kézzel törlendő, ha már nem szükséges.) –Eseménykezelőt hozzárendelni a vezérlőn való kettős kattintással is lehet, ez az ún. alapértelmezett eseményhez rendel eseménykezelőt 33
V 1.0ÓE-NIK, 2014 Feladat 34