Windows Presentation Foundation (WPF)

Slides:



Advertisements
Hasonló előadás
Osztály leszármaztatás
Advertisements

Grafikus tervezőrendszerek programozása 10. előadás.
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 8. rész – Grafikus felhasználói felület Nyugat-Magyarországi Egyetem Faipari Mérnöki.
II. Grafikus felhasználói interfész
Az operációs rendszer Egy olyan szoftver, ami a számítógépeink használatához nélkülözhetetlen. Főbb feladatai: programok betöltése, futtatása perifériák.
Mellár János 3. óra Szeptember 16. v
Iratkezelő rendszer fejlesztése WPF alapokon
Felhasználó barátság eszközei
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Adatbányászati technikák (VISZM185)
Hibakezelés és Tesztelés a Visual Studio.NET-ben
Öröklődés 2..
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Elektronikai Áramkörök Tervezése és Megvalósítása
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Tömbök ismétlés Osztályok Java-ban Garbage collection
A CLIPS keretrendszer CLIPS "C" Language Integration Production System.
VFP programozása report készítése menü készítése dinamikus elemek
Közös kinézet Mester oldal, témák, skin-ek, css Webalkalkalmazás fejlesztése ASP.NET-ben Krizsán Zoltán.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Haladó Programozás Eseménykezelés ismétlés Névtelen metódusok (anonymous methods)
Doros Roland Mérnök-informatikus hallgató BMF-Nik
Kliensoldali Programozás
Delphi programozás Delphi programozás SRTNB előadás - Borland Delphi – fontosabb komponensek tárgyalása Nagyváradi Anett.
Delphi programozás alapjai Nagyváradi Anett PTE PMMK MIT.
VFP Form programozás Form szerkesztő elemei vezérlő elemek
Microsoft Access Űrlapok tervezése.
1 Operációs rendszerek Az NT folyamatok kezelése.
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
Bátyai Krisztián NetAcademia Oktatóközpont oktató, fejlesztő MCT, MCPD
A program a „Tudáshasznosulást, tudástranszfert segítő eszköz-, és feltételrendszer kialakítása, fejlesztése a Műegyetemen” (TÁMOP /1/KMR )
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
Delphi Készítette: Rummel Szabolcs Elérhetőség:
APEX BMF, II. félév.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
Visual Basic 2008 Express Edition
Visual Basic 2008 Express Edition
1. Feladat Hozzunk létre egy olyan programot amely számokat ír ki és a felhasználónak időre be kell gépelni ezeket.
Generics Krizsán Zoltán. Bemutató A.NET 2.0 verziótól. A.NET 2.0 verziótól. Típusparaméter Típusparaméter Más nyelvben ez a template (sablon). Más nyelvben.
Apache Ant 2. gyakorlat Alkalmazásfejlesztés /2 Gyakorlat Zalatnai Csongor.
V 1.0 Programozás III. További ablakok készítése Továbbított események.
A Visual Basic nyelvi elemei
Óravázlat Készítette: Kucsera Mihály és Toldi Miklós
Programozás III. Grafikus felület API-k és összehasonlításuk
Webprogramozó tanfolyam Űrlapok (form-ok). Űrlapok a HTML-ben Biztosan mindenki találkozott már vele – Űrlap példapélda Felhasználási lehetőségei – Regisztráció,
Első lépések a szövegszerkesztő használatában
A Visual Basic és a programozás oktatása
Vizuális programozás Szoftvertechnológia I.
Opencms modul fejlesztés Krizsán Zoltán. Modulok fajtái Nincs előírás, csak tipikus tennivalók: –Content type: új típus(oka)t vezet be. –Template: új.
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Windows Forms alkalmazás készítése Czigléczky Gábor 2009.
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.
Alapok Gyakorlat 2015/16 őszi szemeszter Automatizálási tanszék.
V 1.0 Programozás III. XML XAML Adatkötés I.. V 1.0ÓE-NIK, 2014 XML (w3schools.com) Hierarchikus adatleíró formátum XML deklarációk + elemek + attribútumok.
Információ és kommunikáció
Alkalmazásfejlesztés gyakorlat
Továbbított események További ablakok készítése
Windows Presentation Foundation
Neumann János Informatikai Kar
Neumann János Informatikai Kar
Programozás III. Felhasználóifelület-elemek fontosabb tulajdonságai, eseményei, metódusai Preview események.
Programozás III. MVVM Adatkötés I..
Neumann János Informatikai Kar
A CLIPS keretrendszer
Adatkötés Sablonokkal
Hálózati architektúrák
Adatkonverziók Erőforrások
Programozás III. MVVM Adatkötés I..
Windows Presentation Foundation (WPF)
B M Java Programozás 5. Gy: Java alapok IT A N Adatkezelő 1.rész
Előadás másolata:

Windows Presentation Foundation (WPF) Vizuális Programozás

J.Zs.Cs.: Vizuális programozás (c) 2012 WPF Új grafikus alrendszer 2D és 3D grafika Dokumentumok Média Teljesen vektorgrafika orientált  könnyen nagyítható (pl. felhasználói felület) DirectX szükséges Lebegőpontos koordináták, logikai pixel J.Zs.Cs.: Vizuális programozás (c) 2012

WPF alkalmazás típusok Hagyományos asztali alkalmazás Navigáció alapú alkalmazás XBAP alkalmazás Hagyományos asztali alkalmazás – igazi újdonság a vektorgrafikus megjelenítés Navigáció alapú alkalmazás – Előre, hátra gombok, lapok közötti lépkedés, előzmények tárolása, navigációs sáv XBAP alkalmazás – XAML Browser Application Biztonsági korlátok: nem hozhat létre új ablakot, csak izolált tárolás, nem fér hozzá a fájlrendszerhez, nem használhat Windows Forms vagy AxtiveX felületet, nem használhat nem menedzselt kódot. J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Felület létrehozása C# kódból XAML – Visual Studio, Expression Blend, Jegyzettömb J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Felület kódból A felület leírását elkészíthetjük kódból is Button btKódból = new Button(); btKódból.Content = "Ez kódból készült"; Grid grRács = new Grid(); btKódból.Width = 100; btKódból.Height = 50; btKódból.Margin = new Thickness(0,0,0,30); btKódból.HorizontalAlignment = HorizontalAlignment.Center; btKódból.VerticalAlignment = VerticalAlignment.Bottom; btKódból.Click += new RoutedEventHandler(btKódból_Click); grRács.Children.Add(btKódból); J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Felület kódból J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 XAML eXtensible Application Markup Language Cél: design és kód különválasztása Profi alkalmazásoknál külön tervező Deklaratív alkalmazásfejlesztési modell Ha megnézzük a C# kódot, láthatjuk, hogy egy C# osztály keletkezett Window1 néven. Ha nincs méret megadva, akkor a nyomógomb az egész ablakot kihasználja. J.Zs.Cs.: Vizuális programozás (c) 2012 7

J.Zs.Cs.: Vizuális programozás (c) 2012 XAML Gyökérelemek Window Page Application Elem Egy osztály Attribútum Egy tulajdonság a komponens osztályában J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 BAML Binary Application Markup Language Az XAML-ben leírt felület bináris változata Fordításkor keletkezik az XAML-ből EXE-be beágyazva ~\obj\Debug\*.BAML Betöltés az InitializeComponent-ben J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Hivatkozás a nyomógombra a kódban XAML-ben Name="btPróba" attribútum Az eseménykezelőben btPróba.Background = Brushes.Red; btPróba.Content = "Felirat"; J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Document Outline Tervezési nézetben a felületet leíró dokumentumhierarchiát megtekinthetjük a Document Outline ablakban Fa hierarchiák WPF-ben Logikai fa Vizuális fa J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Logikai fa Leírja a szülő és a gyerek objektumok közötti összefüggést Rácsban nyomógomb, amiben rács, amiben kép és szöveg Fontos a tulajdonságok öröklése szempontjából Navigálás: GetParent, GetChildren, FindLogicalNode J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Vizuális fa Meghatározza, hogy egy objektum hogyan lesz megjelenítve a grafikus alapelemek felhasználásával (vonalak, négyszögek, stb.) Fontos a transzformációk szempontjából J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Application osztály System.Windows.Application Tulajdonságok: Current – a futó alkalmazás objektum – pl. alkalmazás szintű változók, leállítás MainWindow – a fő ablak Windows – az alkalmazást létrehozó szálból létrehozott ablakok gyűjteménye J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Application osztály StartupUri – az alkalmazás indításakor automatikusan megnyitott ablak/lap Properties – az alkalmazásból bárhonnan elérhető adatok tárolása Application.Current.Properties["Név"]=Érték; Események: Startup Exit J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Vezérlők Nem kell új (származtatott) vezérlőt írni ahhoz, hogy egy vezérlő megjelenését megváltoztassuk (pl. ellipszis alakú nyomógomb) Sablonokkal (Template) megoldva Csak akkor kell új vezérlőt írni, ha a viselkedést akarjuk megváltoztatni J.Zs.Cs.: Vizuális programozás (c) 2012

Core user input controls Button, RadioButton, ComboBox, CheckBox, Calendar, DatePicker, Expander, DataGrid, ListBox, ListView, Slider, ToggleButton, TreeView, ContextMenu, ScrollBar, Slider, TabControl, TextBlock, TextBox, RepeatButton, RichTextBox, Label J.Zs.Cs.: Vizuális programozás (c) 2012

Window and control decoration Menu, ToolBar, StatusBar, ToolTip, ProgressBar J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Media controls Image, MediaElement, SoundPlayerAction J.Zs.Cs.: Vizuális programozás (c) 2012

Tárolók (rétegmenedzserek) Grid – sorok és oszlopok alakíthatók ki UniformGrid – minden cella azonos méretű StackPanel – vízszintesen vagy függőlegesen elhelyezett elemek DockPanel – dokkolás támogatása Canvas – koordináta alapú tárolás WrapPanel – az elemek egyenes vonalban helyezkednek el A tárolók egymásba ágyazhatóak A ContentControl-ból származtatott osztályok (ilyen pl. a Window) csak egy objektumot tárolhatnak a Content tulajdonságukban. Ha több komponenst akarunk rátenni, akkor egy tárolót teszünk rá először, majd a tárolóra helyezzük el a további komponenseket. J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Grid és DockPanel J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 StackPanel Térköz nélkül helyezi el az elemeket alapból J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Canvas Alapból mindegyik nyomógomb a bal felső sarokban jelenik meg. Ha nem adunk meg egy koordinátát, akkor azt nullának értelmezi. J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Méret Device Independent Unit 1 DIU=1"/96 Windows alapért.: 96 DPI=96 pont/1" → 1 pont = 1 DIU J.Zs.Cs.: Vizuális programozás (c) 2012

Dependency Property Hasonlóan néz ki mint a .NET tulajdonságok, de annál jóval komplexebb Főbb eltérések a tulajdonságokhoz képest A tulajdonság közvetlenül olvassa ki a védett mezőből az adatokat Depencency Property dinamikusan gyűjti be az információt a GetValue() metódus meghívásával Ezt a függvényt a DependencyObject-től örökli WPF Dependency Property: http://www.wpftutorial.net/dependencyproperties.html WPF Control Hierachia: http://soumya.wordpress.com/2010/01/10/wpf-simplified-part-10-wpf-framework-class-hierarchy/

Dependency Property További eltérések: Adatmódosításnál (érték beállítása) a DependencyObject-től kapott dictionary-nek (kulcs-érték párok halmaza) adunk egy értékpárt A kulcs lesz az a tulajdonság, amit változtatni akarunk, az érték pedig amire be akarjuk állítani

Dependency Property Előnyei: Kevesebb memóriát fogyasztunk Rengeteg adatot tárolunk a UI vezérlők adattagjaiban Értékek öröklődése Ha lokálisan nincs érték beállítva, akkor a logikai fában felfelé haladva addig megyünk, amíg nem találunk értéket Pl.: FontSize-ot beállítjuk egy gyökér elemben akkor az mindenre ki fog hatni (ha lokálisan nem változtatjuk meg)

Dependency Property Előnyei 2: Értesítés a változásokról Beépített változás-értesítés Callback metódus segítségével kapunk értesítést a változásokról Adatkötésre is Dependency property-t használjuk (Binding)

Dependency property Létrehozása Visual Studioban propdp <TAB> <TAB> - code snippet Kell egy statikus DepdencyProperty típusú mező, ami meghívja a DependencyProperty.Register() metódusát A neve mindig Propety-vel kell, hogy végződjön! Register metódusban meg kell adni a Tulajdonság nevét Tulajdonság típusát Tartalmazó típusát Metadata típusát (ha nem akarjuk használni, null-t adhatunk neki)

Dependency property public string Tükör { get { return(string)GetValue(TukorProperty); } set { SetValue(TukorProperty, value); } public static readonly DependencyProperty TukorProperty = DependencyProperty.Register("Tukor", typeof(string), typeof(Tukorkep), null);

Attached property Speciális Dependency Property Pl.: Panel-től származó konténer elemek <Canvas> <Button Canvas.Top="20" Canvas.Left="20" Content="Gomb"/> </Canvas>

Value Resolution Strategy http://www.wpftutorial.net/dependencyproperties.html When you access a dependency property over its .NET property wrapper, it internally calls GetValue(DependencyProperty) to access the value. This method resolves the value by using a value resolution strategy that is explained in detail below. If a local value is available, it reads it directly from the dictionary. If no value is set if goes up the logical tree and searches for an inherited value. If no value is found it takes the default value defined in the property metadata. This sequence is a bit simplified, but it shows the main concept. J.Zs.Cs.: Vizuális programozás (c) 2012

Value Changed Callback private static void OnCurrentTimePropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e) { MyClockControl control = source as MyClockControl; DateTime time =(DateTime)e.NewValue; // Put some update logic here... } The change notification callback is a static method, that is called everytime when the value of the TimeProperty changes. The new value is passed in the EventArgs, the object on which the value changed is passed as the source. J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Coerce Value Callback private static object OnCoerceTimeProperty( DependencyObject sender, object data ) { if ((DateTime)data > DateTime.Now ) data = DateTime.Now; } return data; The coerce callback allows you to adjust the value if its outside the boundaries without throwing an exception. A good example is a progress bar with a Value set below the Minimum or above the Maximum. In this case we can coerce the value within the allowed boundaries. In the following example we limit the time to be in the past. J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Validation Callback private static bool OnValidateTimeProperty(object data) { return data is DateTime; } In the validate callback you check if the set value is valid. If you return false, an ArgumentException will be thrown. In our example demand, that the data is an instance of a DateTime. J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Menü <Menu x:Name="mnFőmenü" Height="30"> <Menu.ItemsPanel> <ItemsPanelTemplate> <DockPanel HorizontalAlignment="Stretch"/> </ItemsPanelTemplate> </Menu.ItemsPanel> <MenuItem Header="Kever" x:Name="miKever" VerticalAlignment="Center" /> A menüsávban a menüpontok alapból felülre igazítottan jelennek meg, amin a szokásos VerticalAlignment vagy VerticalContentAlignment tulajdonságokkal nem tudunk változtatni. A megoldás a menüelem megjelenítés sablonbeállításának módosítása. Egy DockPanelt (vagy vízszintes StackPanel-t)helyezünk el az ItemsPanelben, és ebben már érvényesülni fog a menüpont VerticalAlignment="Center" tulajdonsága. J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 GridSplitter <Grid x:Name="grRács"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition /> </Grid.ColumnDefinitions> <TextBox Grid.Column="0" MinWidth="100" Text="TextBox"/> <GridSplitter Grid.Column="0" Width="5" /> <TextBox Grid.Column="1" TextWrapping="Wrap" Text="TextBox" /> </Grid> J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Eszköztár <ToolBar Height="34" DockPanel.Dock="Top" > <Button Content="Indít" /> <Button > <Image Source="/Ikonok/copy.ico"/> </Button> <Button> <Image Source="/Ikonok/cut.ico"/> <Image Source="/Ikonok/delete.ico"/> <Image Source="/Ikonok/paste.ico"/> </ToolBar> Ikonok forrása: c:\Program Files\Microsoft Visual Studio 10.0\Common7\VS2010ImageLibrary\1033\VS2010ImageLibrary.zip J.Zs.Cs.: Vizuális programozás (c) 2012

Ikonok befordítása a szerelvénybe1 Solution Explorerben egy mappa az ikonoknak Ikonok bemásolása a mappába Ikonok kijelölése J.Zs.Cs.: Vizuális programozás (c) 2012

Ikonok befordítása a szerelvénybe2 Properties Build Action=Resource Copy to Output Directory=Do not copy Build/Rebuild Solution J.Zs.Cs.: Vizuális programozás (c) 2012

Képek tárolása szerelvényen kívül Properties Build Action=Content Copy to Output Directory=Copy always Build/Rebuild Solution

J.Zs.Cs.: Vizuális programozás (c) 2012 Többsoros szövegmező J.Zs.Cs.: Vizuális programozás (c) 2012

Jobbra igazított menüpont a főmenüben J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Viselkedés A viselkedést a vezérlő API-ja határozza meg Parancsok (Commands) – műveletek támogatása: Copy, Cut, Paste, stb. Viselkedés vagy a kinézet módosítása tulajdonságokkal: font, háttérszín, stb. Események Funkcionalitást megvalósító metódusok: Sort, Clear Az első az újdonság, a többi a WinForms-ban is megvan. J.Zs.Cs.: Vizuális programozás (c) 2012

Eseménykezelés Eseményekre fel lehet iratkozni: Design nézetből a Properties ablakban Alapértelemezett eseményre feliratkozás duplán rákattintva a vezérlőre (pl.: Button-nél a click) XAML-ből Pl: <Button x:Name="btBack" Content="Vissza" Click="btBack_Click"/> C# kódból

J.Zs.Cs.: Vizuális programozás (c) 2012 Eseménykezelés XAML: Click="metódusnév" attribútum Automatikus vázgenerálás J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Események Továbbított esemény (Routed Events) Ha egy vezérlő több elemből épül fel (pl. egy nyomógomb, amin van egy kép és egy szöveg) Attól függetlenül, hogy a képen, a szövegen vagy a nyomógombon kattintunk ugyanolyan értesítés akarunk kapni Direkt esemény (Direct Event) – a WinForm-mal azonos módon működik, az eseményt csak az előidéző objektumban dolgozhatjuk fel J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Továbbított esemény Buborék esemény (Bubbling Event) – először az eseményt kiváltó vezérlő kapja meg, majd az őt tartalmazó rács, majd a nyomógomb, és így tovább felfelé a hierarchiában a gyökér csomópontig. Lefutó esemény (Tunneling Event) – Preview-al kezdődik a neve, a gyökértől kiindulva halad lefele az esemény előidéző vezérlőhöz. Általában az események blokkolására használják: e.Handled=true; Először a TE majd a BE következik be BE,TE: a vándorlás addig tart, amíg az eseményt le nem kezelik. J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Commands Egy műveletet több módon is előidézhetünk: menü, gyorsbillentyű, eszköztár Kössük őket össze, hogy egyszerűen megoldható legyen a letiltás/engedélyezés → Commands objektumok Beépített és programozó által definiált parancs osztályok J.Zs.Cs.: Vizuális programozás (c) 2012

Beépített parancs osztályok ApplicationCommands: pl. vágólap, mentés, megnyitás, új, lezárás, nyomtatás ComponentCommands: vezérlőktől származó parancsok és információk feldolgozása: pl. ScrollUp EditingCommands: szövegszerkesztési parancsok: pl. félkövér, dőlt, igazítás MediaCommands: video és audio lejátszását előíró parancsok: pl. lejátszás, szünet, hangerő, sávválasztás J.Zs.Cs.: Vizuális programozás (c) 2012

CommandDemo

J.Zs.Cs.: Vizuális programozás (c) 2012 CommandBinding A CommandBinding osztály kapcsolja össze a parancsot és az eseménykezelőt Eseményei: CanExecute: e.CanExecute=true; Executed J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Vezérlők csatolása Az aláhúzásjel azt jelenti, hogy az N betű aláhúzva jelenik meg. A csatolás hatására ha Alt+N-et nyomunk, akkor a szerkesztőmező kapja meg az input fókuszt. J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Jelszóbevitel J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012

Párbeszédablakok használata Megjelenítés módja szerint Modális Nem modális A megoldás módja szerint Beépített (üzenetablak, common dialog boxes) Saját készítésű (custom dialog box) http://msdn.microsoft.com/en-us/library/aa969773%28v=vs.110%29.aspx J.Zs.Cs.: Vizuális programozás (c) 2012

Beépített párbeszédablakok MessageBox Common Dialog Boxes – Közös párbeszédablakok (Microsoft.Win32) SaveFileDialog OpenFileDialog PrintDialog http://msdn.microsoft.com/en-us/library/aa969773.aspx#Common_Dialogs J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Egyszerű üzenetablak MessageBox.Show( "Egyszerű üzenetablak"); J.Zs.Cs.: Vizuális programozás (c) 2012

Kétgombos üzenetablak J.Zs.Cs.: Vizuális programozás (c) 2012

Háromgombos üzenetablak J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 OpenFileDialog Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); dlg.FileName = "Document"; // Default file name dlg.DefaultExt = ".txt"; // Default file extension dlg.Filter = "Text documents (.txt)|*.txt"; Nullable<bool> er= dlg.ShowDialog(); if (er== true) { string filename = dlg.FileName; } J.Zs.Cs.: Vizuális programozás (c) 2012

SaveFileDialog Fájlok mentése Microsoft.Win32 névtér SaveFileDialog sfd = new Microsoft.Win32.SaveFileDialog(); sfd.FileName = ""; sfd.DefaultExt = ".text"; sfd.Filter = "Text documents (.txt)|*.txt"; // Megjelenítjük az ablakot. Nullable<bool> er= sfd.ShowDialog(); // Mire kattintottak if (er== true) { // Elérési út string Text = sfd.FileName; … }

PrintDialog Dokumentumok nyomtatása PrintDialog pd = new System.Windows.Controls.PrintDialog(); pd.PageRangeSelection = PageRangeSelection.AllPages; pd.UserPageRangeEnabled = true; // Megjelenítjük az ablakot Nullable<bool> result = pd.ShowDialog(); //mire kattintottak if (result == true) { //nyomtatás }

J.Zs.Cs.: Vizuális programozás (c) 2012 Általános lépések Párbeszédablak objektum létrehozása Kezdeti megjelenést szabályozó tulajdonságok beállítása Megjelenítés Ha OK-val zárta be a felhasználó, akkor módosított tulajdonságok kiolvasása J.Zs.Cs.: Vizuális programozás (c) 2012

Egyéni párbeszédablak (Custom Dialog Box) készítése Szokásos ablakfelépítés Ne jelenjen meg a tálcán: ShowInTaskbar="False" Jelenjen meg a szülő ablak területén: WindowStartupLocation="CenterOwner" Melyik vezérlő rendelkezzen kezdetben input fókusszal? FocusManager.FocusedElement= "{Binding ElementName=tbElső}" OK gomb IsDefault="True" – ENTER-re is bezáródik Mégse gomb IsCancel="True" – ESC-re is bezáródik J.Zs.Cs.: Vizuális programozás (c) 2012

Párbeszédablak használata Menüpont <MenuItem x:Name="miÚj" Header="Új ..." Click="miÚj_Click"/> Ablak objektum létrehozása és kezdeti beállítások wndÚjAdat wndÚjAdat = new wndÚjAdat(); wndÚjAdat.Owner = this; wndÚjAdat.Személy.Név = "Valaki Eduárd"; wndÚjAdat.Személy.Átlag = 2; Párbeszédablak megjelenítése wndÚjAdat.ShowDialog(); J.Zs.Cs.: Vizuális programozás (c) 2012

Bevitt adatok ellenőrzése (Validation) Miért? Biztonság Későbbi kivételek elkerülése Idejében jelezni a felhasználó felé Teljesítménynövelés (pl. többrétegű alkalmazásokban a kliens és az alkalmazási rétegek közötti felesleges többszörös adatáramlás elkerülése) Hogyan? Validációs szabállyal Egyszerű ellenőrző metódussal J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Validációs szabály Egy osztály ValidationRule leszármazottja Egy adatkötéshez rendeljük – egy objektum egy tagját kötjük a vezérlő ellenőrizni kívánt tulajdonságához Minden vezérlőhöz szabály, egy vezérlőhöz akár több szabály is using System.Windows.Controls; Validate metódus átdefiniálása J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Validate metódus J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Input fókusz és névtérhivatkozás beállítása a megjelenő párbeszédablakban J.Zs.Cs.: Vizuális programozás (c) 2012

Validációs szabály vezérlőhöz rendelése Ha nem ismeri fel a vrÁtlag osztályt, akkor a megoldást újból kell Build-elni! Alapból akkor ellenőrizne, amikor a vezérlő elveszti az input fókuszt. Annak érdekében, hogy már gépeléskor legyen ellenőrzés a kötést kiegészítjük a UpdateSourceTrigger="PropertyChanged"-el. J.Zs.Cs.: Vizuális programozás (c) 2012

Beállítások a párbeszédablak osztályában A Személy osztályból készült objektumra igazából azért van szükség, hogy legyen amihez létrehozzuk az adatkötést, amihez kapcsolódik a validációs szabály. J.Zs.Cs.: Vizuális programozás (c) 2012

Hibás adatbevitelnél piros keret a szövegmező körül J.Zs.Cs.: Vizuális programozás (c) 2012

A validációs metódusban megadott hibaüzenet megjelenítése Gyorstippben (buborék - ToolTip) Egy erre célra beépített vezérlőben (pl. TextBlock) J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Megvalósítás Definiálunk egy osztályt, ami megvalósítja az IValueConverter interfészt – cél a hibaüzenetek egyetlen sztringbe foglalása Statikus erőforrásként felvesszük a párbeszédablak XAML leírásába A szövegmező ToolTip tulajdonságának vagy a kiegészítő vezérlő Text tulajdonságának értékét adatkötéssel a szövegmező hibagyűjteményéből vesszük Az átalakító osztály gondoskodik a sztringgé alakításról J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Átalakító osztály using System.Windows.Controls; using System.Windows.Data; J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Statikus erőforrás <Window.Resources> <local:HibaÁtalakító x:Key="Átalakító" /> </Window.Resources> Ez azt jelenti, hogy az ablak létrehozásakor létrejön egy HibaÁtlalakító típusú objektum, amire Átalakító néven tudunk hivatkozni az XAML-ben. J.Zs.Cs.: Vizuális programozás (c) 2012

Hibaüzenet gyorstippben J.Zs.Cs.: Vizuális programozás (c) 2012

Hibaüzenet TextBlock-ban J.Zs.Cs.: Vizuális programozás (c) 2012

J.Zs.Cs.: Vizuális programozás (c) 2012 Az OK gomb kezelése Ha egy ablakot egyszer bezártunk, akkor az már nem lesz újra megjeleníthető, bár maga az objektum ott marad a memóriában. Ha újból kell a párbeszédablak, akkor egy új objektumot kell létrehozni ebből az ablaktípusból. J.Zs.Cs.: Vizuális programozás (c) 2012

Egy csomópont alatti összes csomópont hibaállapotának ellenőrzése A metódus teljesen általános, változtatás nélkül bármely párbeszédablaknál felhasználható. J.Zs.Cs.: Vizuális programozás (c) 2012

Adatátadás párbeszédablakoknak és UserControl-oknak Hagyományos megoldások Konstruktornak átadott paraméter Értékeadás egy tulajdonságnak (akár inicializáló listában) WPF újdonság Az alkalmazáshoz kapcsolódó tulajdonság gyűjtemény: Application.Current.Properties J.Zs.Cs.: Vizuális programozás (c) 2012

Tulajdonság gyűjtemény J.Zs.Cs.: Vizuális programozás (c) 2012