Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Windows Presentation Foundation (WPF)

Hasonló előadás


Az előadások a következő témára: "Windows Presentation Foundation (WPF)"— Előadás másolata:

1 Windows Presentation Foundation (WPF)

2 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

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

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

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

6 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

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

8 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

9 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

10 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

11 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

12 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

13 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

14 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

15 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

16 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

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

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

19 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

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

21 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

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

23 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

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

25 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

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

27 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

28 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

29 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

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

31 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

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

33 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

34 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

35 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

36 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

37 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

38 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

39 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

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

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

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

43 Beépített párbeszédablakok
Üzenetablak: MessageBox Common Dialog Boxes – Közös párbeszédablakok (Microsoft.Win32) SaveFileDialog OpenFileDialog PrintDialog J.Zs.Cs.: Vizuális programozás (c) 2018

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

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

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

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

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

49 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

50 Á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

51 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

52 Ű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

53 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

54 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

55 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

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

57 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

58 Űrlap az alkalmazás főablakában
<Window x:Class="Hallgatok.wndFőablak" xmlns= /xaml/presentation xmlns:x= /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

59 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

60 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

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

62 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

63 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

64 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

65 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

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

67 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

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

69 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

70 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

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

72 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

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

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

75 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

76 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


Letölteni ppt "Windows Presentation Foundation (WPF)"

Hasonló előadás


Google Hirdetések