Windows Presentation Foundation (WPF)

Slides:



Advertisements
Hasonló előadás
Grafikus tervezőrendszerek programozása 10. előadás.
Advertisements

GoldWorks grafika. Grafikus objektumok  előre definiált keretek  images (egy vagy több rés értékének reprezentálása)  canvases (image-ek megjelenítésére)
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.
Operációs Rendszerek I.
Az algoritmizálás oktatás egy lehetséges útja: Visual Basic
Windows Presentation Foundation (WPF)
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
Objektum Orientált Programozás Visual Basicben. 2 Objektumok Object – egy dolog, tárgy, „valami” –Command button, text box, stb. Jellemzők –Properties.
Grafika. 2 Mértékek és koordináta rendszer Használjuk a RGB és QBColor függvényeket a színekhez Grafika létrehozása Load/change picture futási időben.
© 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
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.
Grafika a programban Készítette: Pető László. Bevezetés Valójában nem a célobjektumra rajzolunk, hanem annak festővászon területére (canvas). Csak olyan.
Leírónyelvek: HTML és XHTML
A Windows grafikus felülete
Ellenőrző kérdések a)Auto-indexing enabled b)Auto-indexing disabled c)Nem eldönthető 1.
VFP programozása report készítése menü készítése dinamikus elemek
SQL92 lehetőségek KL A tábla B tábla C view adatok VIEW működése utasítás: SELECT.. FROM A,B … SELECT.. FROM C Az adatok a hivatkozáskor állítódnak elő.
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)
Készítette: Keszthelyi Zsolt
Kliensoldali Programozás
VFP Form programozás Form szerkesztő elemei vezérlő elemek
Microsoft Access Űrlapok tervezése.
MACROMEDIA FLASH Mire használható? példák. MACROMEDIA FLASH vektor – bitmap.
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 )
Vizuális alkalmazások a FoxProban Páll Éva Boglárka.
Windows Forms Párbeszédablakok és vezérlők
Delphi Készítette: Rummel Szabolcs Elérhetőség:
APEX BMF, II. félév.
Visual Basic 2008 Express Edition
Visual Basic 2008 Express Edition
Az NVU webszerkesztő program
A C++ nyelv.
V 1.0 Programozás III. További ablakok készítése Továbbított események.
Ó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.
Szebb és használhatóbb programok Vezérlőelemek dinamikus felhelyezése.
Széles körben elérhető Professzionális grafikus futtató környezet.
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.
V 1.0 Programozás III. Gyakorlás. V 1.0ÓE-NIK, 2014 Gyakorlás –Feladat: Tic Tac Toe játék –Szabályok: A játékosok felváltva teszik le a jelöléseiket.
Lekérdezések Adott tulajdonságú adatok listázásának módja a lekérdezés. A lekérdezések segítségével az adatbázisból megjeleníthetjük, módosíthatjuk, törölhetjük.
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
Programozás III. Felhasználóifelület-elemek fontosabb tulajdonságai, eseményei, metódusai Preview események.
ListBox CheckedListBox TextBox
ComboBox A listák nagy helyet foglalnak a formokon, és az általuk felkínált elemek nem bővíthetőek a felhasználó által. Ezen problémák megoldására használhatjuk.
Neumann János Informatikai Kar
Kanyó Kristóf Milacski Zoltán
YUI február YUI szeptember YUI3
A CLIPS keretrendszer
Adatkötés Sablonokkal
Adatkonverziók Erőforrások
JavaScript a böngészőben
Táblázatkezelés Az Excel.
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)

WPF 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) 2018

Felület létrehozása, komponensek használata J.Zs.Cs.: Vizuális programozás (c) 2018

Felület létrehozása C# kódból XAML – Visual Studio Blend for Visual Studio Jegyzettömb Visual Studio XAML design tools that enable you to: Design a custom layout Use powerful layout tools, including templates, built-in controls, rulers, guides, and snapping support, to design custom layouts for your Windows Store app. Create and style controls Drag and drop controls onto the design surface, and then style them by modifying properties directly in the UI. Style images and elements. Create and edit control templates Use the template editing tools to create custom control templates that can be reused throughout your project. Add them to your control library to reuse them in projects outside of the current project. Create and edit data templates Create templates that define how you want your data to be displayed in your app. Display sample and design-time data Bind to and display data in your Windows Store app so that you can more easily modify the appearance of your data at run time. Use behaviors to add interactivity Add interactivity to your app by dragging a built-in behavior onto the object on the design surface and modifying the properties to suit your needs. Edit XAML markup In addition to the UI tools that make it easy to create and modify XAML without touching code. Blend enable you to: Insert controls and modify their behavior in XAML Designer Add controls to the artboard You can drag controls from the Assets panel onto the artboard, and then modify them in the Properties window. Make a control out of an image, shape, or path You can make any object into a control. Make controls do things Controls can perform actions when users interact with them. For example, they can start an animation, update a data source or play a video. Use triggers, behaviors, and events to make controls do things. Insert images, videos, and audio clips in XAML Designer Draw shapes and paths Draw a shape Draw a path Convert a shape to a path Combine paths Create a compound path Create a clipping path Modify the style of objects Animate objects Create timelines Add keyframes and repeat the animation Add event triggers for interactivity Animate colors Create and modify motion paths Animate the button Create animation and work with easing References https://msdn.microsoft.com/en-us/library/jj129478.aspx https://msdn.microsoft.com/en-us/library/jj170634.aspx J.Zs.Cs.: Vizuális programozás (c) 2018

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

Felület XAML kódból 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) 2018 7

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

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) 2018

C# - ban 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) 2018

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) 2018

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) 2018

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) 2018

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) 2018

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) 2018

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) 2018

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) 2018

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

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

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) 2018

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

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) 2018

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

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) 2018

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

Menüpontok függőlegesen középre igazítása <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) 2018

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> Visual Studio Image Library: https://www.microsoft.com/en-us/download/details.aspx?id=35825 J.Zs.Cs.: Vizuális programozás (c) 2018

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) 2018

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) 2018

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) 2018

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

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) 2018

Események és viselkedés J.Zs.Cs.: Vizuális programozás (c) 2018

Routed Events 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 Mindegyik esemény routed event, a feldolgozási stratégia határozza meg, hogy direkt, le vagy felfutónak nevezzük. J.Zs.Cs.: Vizuális programozás (c) 2018

Eseménykezelési stratégiák 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; 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. Direkt esemény (Direct Event) csak az előidéző objektumban dolgozhatjuk fel 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) 2018

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 XAML: Click="metódusnév" attribútum Automatikus vázgenerálás J.Zs.Cs.: Vizuális programozás (c) 2018

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) 2018

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) 2018

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) 2018

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

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

Űrlapok, adatbevitel és ellenőrzés J.Zs.Cs.: Vizuális programozás (c) 2018

Párbeszédablakok típusai Megjelenítés módja szerint Modális ( ShowDialog() ) Nem modális ( Show() ) A megoldás módja szerint Beépített (üzenetablak, common dialog boxes) Saját készítésű (custom dialog box) Az űrlap egy külön ablakban (párbeszédablak) jelenik meg Az űrlap az alkalmazás főablakában van elhelyezve, de alapból rejtett http://msdn.microsoft.com/en-us/library/aa969773%28v=vs.110%29.aspx J.Zs.Cs.: Vizuális programozás (c) 2018

Beépített párbeszédablakok Üzenetablak: 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) 2018

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

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

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

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

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

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) 2018

Á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) 2018

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 (ablak Window tagben beállítva)? FocusManager.FocusedElement= "{Binding ElementName=tbElső}" OK gomb IsDefault="True" Mégse gomb IsCancel="True" DialogResult tulajdonság true/false J.Zs.Cs.: Vizuális programozás (c) 2018

Űrlap külön ablakban – Jelszóbeviteli párbeszédablak Csatolás Csatolás A címkéket csatoltuk a szövegmezőkhöz. J.Zs.Cs.: Vizuális programozás (c) 2018

Használat Legyen más osztályból is olvasható Párbeszédablak osztálya Főablak osztálya Legyen más osztályból is olvasható J.Zs.Cs.: Vizuális programozás (c) 2018

Párbeszédablak kezdeti beállítással Menüpont (főablak XAML) <MenuItem x:Name="miÚj" Header="Új ..." Click="miÚj_Click"/> Ablak objektum létrehozása és kezdeti beállítások (főablak C#): var wnd= new wndÚjAdat { Owner= this, Személy={ Név= "Valaki Eduárd", Átlag= 2} }; wndÚjAdat.ShowDialog(); Párbeszédablak megjelenítése Demo: EgyeniParbeszedAblak A pb. ablak osztályában van egy publikus Személy típusú tulajdonság J.Zs.Cs.: Vizuális programozás (c) 2018

Beállítások a párbeszédablak osztályában Személy objektum létrehozása az ablak létrehozásakor 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. Objektum rácshoz „kötése” J.Zs.Cs.: Vizuális programozás (c) 2018

Komplex adatkötés J.Zs.Cs.: Vizuális programozás (c) 2018

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) 2018

Űrlap az alkalmazás főablakában <Window x:Class="Hallgatok.wndFőablak" xmlns=http://schemas.microsoft.com/winfx/2006 /xaml/presentation xmlns:x=http://schemas.microsoft.com/winfx /2006/xaml xmlns:hallgatok="clr-namespace:Hallgatok„ Title="Hallgatói adatok" Height="350" Width="525"> … <hallgatok:ucHallgatóAdatrögzítés x:Name="ucHallgatóAdatrögzítés" Grid.Row="1" Visibility= " Collapsed" /> <hallgatok:ucHallgatoAdatmodositas x:Name="ucHallgatóAdatmódosítás" Visibility="Collapsed" Grid.Row="1"/> J.Zs.Cs.: Vizuális programozás (c) 2018

Megjelenítés - elrejtés private void miHallgatóAdatrögzítés_Click(object sender, RoutedEventArgs e) { ucHallgatóAdatmódosítás.Visibility = Visibility.Collapsed; ucHallgatóAdatrögzítés.Visibility = Visibility.Visible; } private void miHallgatóMódosítás_Click(object sender, RoutedEventArgs e) { ucHallgatóAdatrögzítés.Visibility = Visibility.Collapsed; ucHallgatóAdatmódosítás.Visibility = Visibility.Visible; J.Zs.Cs.: Vizuális programozás (c) 2018

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

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

Adatok megjelenítése amikor a komponens (UserControl) láthatóvá válik private void UserControl_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e) { if(!this.IsVisible) return; dsHallgatók=Application.Current.Properties["dsHallgatók"] as dsHallgatók; if (dsHallgatók.dtSzakok.Rows.Count > 1) { cbARSzak.ItemsSource = dsHallgatók.dtSzakok; cbARSzak.DisplayMemberPath = "Szaknév"; cbARSzak.SelectedIndex = 0; } J.Zs.Cs.: Vizuális programozás (c) 2018

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) J.Zs.Cs.: Vizuális programozás (c) 2018

Hogyan? Az ablak OK gombbal történő lezárásához eseménykezelőt készítünk, és ott egyenként ellenőrizzük az egyes mezőkbe beírt adatokat. Hiba esetén hibaüzenet és az ablakot nem zárjuk be ha az ablakot már bezártuk, akkor újból megjelenítjük azt (új objektum példány) user control esetén a uc-t nem rejtjük el. Ún. validációs szabályok segítségével. J.Zs.Cs.: Vizuális programozás (c) 2018

Validációs szabály Egy osztály ValidationRule leszármazottja Komponens Objektum Adatkötés Tulajdonság Tulajdonság Validációs szabály 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) 2018

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

Validációs szabály vezérlőhöz rendelése – XAML kódban A rácshoz egy daforrás objektumot fogunk rendelni futási időben 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. Validációs szabályok kiértékelése már gépelés közben J.Zs.Cs.: Vizuális programozás (c) 2018

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

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) 2018

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) 2018

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

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) 2018

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

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

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) 2018

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) 2018