Eseményvezérelt alkalmazások fejlesztése II 9. előadás. WPF erőforrások kezelése. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Hasonló dokumentumok
Programozási környezetek

Eseményvezérelt alkalmazások fejlesztése II 8. előadás. Összetett WPF alkalmazások. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

A Kiadó előszava... xvii. Köszönetnyilvánítás... xix. Bevezetés... xxi. I. rész: Bevezetés a Silverlight 3 programozásába

Bánsághi Anna 2015 Bánsághi Anna 1 of 31

Eseményvezérelt alkalmazások fejlesztése II 10. előadás. Window Runtime alapismeretek. Windows Runtime alapismeretek A Windows Runtime

Vizuális programozás gyakorlat

Eseményvezérelt és objektumorientált programozás

Ugráló gomb oktatási segédlet Ugráló gomb

Eseményvezérelt alkalmazások fejlesztése II 10. előadás. Xamarin alapismeretek. Xamarin alapismeretek. Xamarin alapismeretek. Xamarin alapismeretek

Eseményvezérelt alkalmazások fejlesztése II 10. előadás. Xamarin alapismeretek. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

3. Beadandó feladat dokumentáció

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET)

Eseményvezérelt alkalmazások fejlesztése II 10. előadás. Window Runtime alapismeretek, Modern UI alapú alkalmazások.

Entity Framework alapú adatbáziselérés 2

2. Beadandó feladat dokumentáció

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET) Cserép Máté.

2. Beadandó feladat dokumentáció

ContractTray program Leírás

Előszó A Windows alkalmazásfejlesztés rövid története A Windows életútja A Windows 8 paradigmaváltása... 16

ServiceTray program Leírás

DebitTray program Leírás

Eseményvezérelt alkalmazások fejlesztése II 7. előadás. WPF alkalmazások architektúrája. WPF alkalmazások architektúrája

Eseményvezérelt alkalmazások fejlesztése II 11. előadás. Window Runtime specifikus alkalmazások megvalósítása. Giachetta Roberto

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

Eseményvezérelt alkalmazások fejlesztése II 7. előadás. WPF alkalmazások architektúrája. Giachetta Roberto

Választó lekérdezés létrehozása

2. Beadandó feladat dokumentáció

Eseményvezérelt alkalmazások fejlesztése II 9. előadás. Window Runtime alapismeretek, Modern UI alapú alkalmazások

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET Core) Cserép Máté

Eseményvezérelt alkalmazások fejlesztése II 5. előadás. Windows Forms alkalmazások párhuzamosítása. Giachetta Roberto

Grafikus felhasználói felület (GUI) létrehozása A GUI jelentése Egy egyszerű GUI mintaalkalmazás létrehozása

DKÜ ZRT. A Portál rendszer felületének általános bemutatása. Felhasználói útmutató. Támogatott böngészők. Felületek felépítése. Információs kártyák

3. Beadandó feladat dokumentáció

.NET-es programozási technológiák

Vizuá lis prográmozá s

Webes alkalmazások fejlesztése 9. előadás. Webszolgáltatások felhasználása (ASP.NET Core &.NET Framework)

ArcGIS 8.3 segédlet 5. Dr. Iványi Péter

CSS3 alapismeretek. Bevezetés a CSS-be. Mi is az a CSS? Alkalmazási formái, szintaxisa

HVK Adminisztrátori használati útmutató

Programozás BMEKOKAA146. Dr. Bécsi Tamás 10. Előadás

APB mini PLC és SH-300 univerzális kijelző Általános használati útmutató

RAJZ1. vezetett gyakorlat

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

Akciók, diavetítés. 1. ábra Akciógombok. A lap két regiszterfülből áll, ezek a Kattintásra és az Áthaladáskor. Nézzük meg először az elsőt!

I. Bevezetés...3. I.1. Eszköz-független egység...3. I.2. WPF többrétegű architektúrája...4. I.3. WPF osztályhierarchiája...5. I.3.1. System.Object...

Eseményvezérelt alkalmazások fejlesztése II 3. előadás. Windows Forms dinamikus felhasználói felület, elemi grafika

Kalandjáték dokumentáció

A webáruház kezdőlapján háromféle diavetítés beállítására van lehetőség:

Webes alkalmazások fejlesztése 9. előadás. Webszolgáltatások felhasználása (ASP.NET WebAPI)

PHP-MySQL. Adatbázisok gyakorlat

Eseményvezérelt alkalmazások fejlesztése I 11. előadás. Szoftverek tesztelése

Ügyviteli rendszerek hatékony fejlesztése Magic Xpa-val mobilos funkciókkal kiegészítve. Oktatók: Fülöp József, Smohai Ferenc, Nagy Csaba

HF-DVR H.264 Hálózati Rögzítő. Felhasználói kézikönyv

A WORDPRESS TESTRESZABÁSA (MEGJELENÉS MENÜ ELEMEI)

Rajz 01 gyakorló feladat

.NET-es programozási technológiák Dr. Kovásznai, Gergely Biró, Csaba

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

Bevezetés a Programozásba II 12. előadás. Adatszerkezetek alkalmazása (Standard Template Library)

Felhasználói leírás a DimNAV Server segédprogramhoz ( )

1. kép. A Stílus beállítása; új színskála megadása.

Windows Phone 7 alapú szoftverfejlesztés ZH kérdések összefoglaló

CMS videó megjelenítő szoftver használata

Objektumok és osztályok. Az objektumorientált programozás alapjai. Rajzolás tollal, festés ecsettel. A koordinátarendszer

2. Beadandó feladat dokumentáció

A Cobra Sprint telepítése CobraContoLight felhasználók számára

A szerzõrõl... xi Bevezetés... xiii

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Használati utasítás.

ESEMÉNY VEZÉRELT ALKALMAZÁSOK FEJLESZTÉSE I. Bevezetés. Készítette: Gregorics Tibor

Bánsághi Anna 2015 Bánsághi Anna 1 of 39

Webshop készítése ASP.NET 3.5 ben I.

Operációs rendszerek. Tanmenet

I. Vezérlők I.1. Content vezérlők I.1.1. Button I.1.2. ToggleButton I.1.3. Label I.1.4. CheckBox és RadioButton...

Bevezetés a QGIS program használatába Összeálította dr. Siki Zoltán

HASZNÁLATI ÚTMUTATÓ DOLGOZÓK IMPORTÁLÁSA KULCS BÉR PROGRAMBA AZ ONLINE MUNKAIDŐ NYILVÁNTARTÓ RENDSZERBŐL. Budapest, november 08.

GráfRajz fejlesztői dokumentáció

Webes alkalmazások fejlesztése 1. előadás. Webes alkalmazások és biztonságuk

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

Eseményvezérelt alkalmazások

Készítsen négy oldalas prezentációt az E CD bolt számára! Tervezze meg az emblémáját!

Két csomag elemeiből lehet a felületet elkészíteni: awt: heavy weight komponensek; swing: light weight komponensek (időben később).

ABAP dictionary objektumok SAP adatmodell Táblák kezelése. Az SAP programozása 1. Tarcsi Ádám

UMN Mapserver és a Grass használata a Geológiában. Soós Dániel, Phd. Hallgató Miskolci Egyetem Geodéziai és Bányaméréstani Intézeti Tanszék

Vizuális programozás gyakorlat

A Canvas LMS új és régi felülete közti különbségek

Grafikus felhasználói felületek. Dr. Szendrei Rudolf Informatikai Kar Eötvös Loránd Tudományegyetem. Programozási technológia I. Dr.

MPLAB IDE - SIM - - Rövid ismertető a használathoz - Kincses Levente 3E22 89/ November 14. Szabadka

Pontfelhő létrehozás és használat Regard3D és CloudCompare nyílt forráskódú szoftverekkel. dr. Siki Zoltán

Algoritmus terv 3. Fejezet: Folyamatok meghatározása

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

Eseményvezérelt alkalmazások fejlesztése I 3. előadás. Dinamikus felületű alkalmazások. Giachetta Roberto

LabVIEW példák és bemutatók KÉSZÍTETTE: DR. FÜVESI VIKTOR

ClicXoft programtálca Leírás

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Országos Területrendezési Terv térképi mellékleteinek WMS szolgáltatással történő elérése, MapInfo program alkalmazásával

Thermo1 Graph. Felhasználói segédlet

EDInet Connector telepítési segédlet

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Átírás:

Eötvös Loránd Tudományegyetem Informatikai Kar Eseményvezérelt alkalmazások fejlesztése II 9. előadás WPF erőforrások kezelése Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto

Erőforrások A Windows Presentation Foundation általánosítja az erőforrás fogalmát a Windows Forms erőforrások azok a képek, hangok, stb. amelyeket csatolunk az egyes felületi osztályokhoz a WPF-ben erőforrás lehet bármely külső fájl, sőt bármely osztály példánya, elsősorban: stílusok (Style): a felületi elemek egységes megjelenését definiálják sablonok (Template): a vezérlők felépülését és adatkötéseit definiálják forgatókönyvek (StoryBoard): animációk végrehajtását biztosítják ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:2

Erőforrások a felületi kódban Bármely felületi elem (UIElement) tartalmazhat erőforrásokat a Resources tulajdonság segítségével, pl.: <Window > <Window.Resources> <! erőforrások az egész ablakra --> </Window.Resources> <Grid Name="LayoutRoot"> <Grid.Resources> <!-- rácson belüli erőforrások --> </Grid.Resources> </Grid> </Window> ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:3

Erőforrásfájlok Amennyiben több ablak, vagy vezérlő számára biztosítani akarjuk ugyanazt a stílus-, animáció- és sablonkészletet, akkor használhatunk erőforrásfájlokat (Resource Dictionary) Window Window UserControl ResourceDictionary csak XAML erőforrásokat tartalmazó fájlok használatba vehetőek bármely ablakban és egyedi vezérlőben, vagy akár a teljes alkalmazásban (az App osztályon keresztül) ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:4

Erőforrásfájlok Pl.: erőforrásfájl (StyleDict.xaml): <ResourceDictionary > <Style x:key= > <!-- stíluselem --> </ResourceDictionary> felhasználása egy ablakban (MainWindow.xaml): <Window.Resources> <ResourceDictionary Source="styleDict.xaml" /> <!-- erőforrásfájl betöltése --> </Window.Resources> ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:5

Erőforrások használata Az erőforrás kulccsal (x:key) rendelkezik, amely alapján lekérdezhetjük a StaticResource hivatkozással, pl.: <Grid Name="grid"> <Grid.Resources> <Style x:key="buttonstyle"> </Style> <!-- megadtuk az erőforrás célját --> </Grid.Resources> <Button Style="{StaticResource buttonstyle}"> Maga a Resources tulajdonság egy asszociatív tömb, amely a kulcsok szerint indexelt, pl.: Style mybuttonstyle = (grid.resources["buttonstyle"] as Style); ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:6

Vezérlők megjelenése A vezérlők megjelenése sokféleképpen befolyásolható, a függőségi tulajdonságok állításával, pl.: <Label Content="Hello World" FontSize="20"> <Label.Background> <!-- háttér --> <LinearGradientBrush> <!-- átmenetes --> <GradientStop Color="Green" Offset="0"/> <GradientStop Color="Red" Offset="1"/> </LinearGradientBrush> </Label.Background> <Label.Effect> <!-- speciális hatások --> <DropShadowEffect BlurRadius="40" Direction="50" Opacity="1"/> <!-- árnyék --> ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:7

Stílusok A stílusok (Style) olyan megjelenési beállítás gyűjtemények, amellyel egyszerre számos elem kinézetét vezérelhetjük a FrameworkElement leszármazottaira használhatóak a Style függőségi tulajdonságon keresztül lehetővé teszik, hogy vezérlők kinézetét egyszerre kezeljük, teljesen függetlenül az operációs rendszer beállításaitól megadhatóak elemenként, pl.: <Button Content="Blue Button"> <Button.Style> <Setter Target="Foreground" Value="Blue" /> </Button.Style> </Button> ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:8

Stílusok megadhatóak erőforrásként, pl.: <Style x:key="buttonstyle" TargetType="Button"> <!-- megadható a céltípus is --> <Setter Target="Foreground" Value="Blue" /> </Style> <Button Style="{StaticResource buttonstyle}" /> a stílusoknak két típusát tartjuk nyilván: implicit: mennyiben nem adunk meg kulcsot, úgy a stílus az összes megadott típusú elemre érvényes lesz, nem szükséges a StaticResource hivatkozás explicit: a kulcs megadásával és a Style tulajdonság használatával definiáljuk a vezérlő stílusát ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:9

Stílusok a stílusokban a Setter elem segítségével függőségi tulajdonságokra (Property) adunk a típusnak megfelelő értéket (Value), pl.: <Style x:key="buttonstyle" TargetType="Button"> <Setter Property="Width" Value="400"/> <!-- egyszerű érték --> <Setter Property="Canvas.Left" Value="200" /> <Setter Property="RenderTransform"> <Setter.Value> <!-- összetett érték --> <TranslateTransform X="100" Y="50" /> </Setter.Value> </Setter> </Style> ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:10

Stílusok dinamikus felületű alkalmazásokban Dinamikus felhasználói felületet ItemsControl vezérlő segítségével tudunk megjeleníteni a megjelenítőt és az elemeket sablonok (ItemsPanel, ItemTemplate) segítségével adjuk meg az elemek tárolókba kerülnek (ItemContainer) Amennyiben speciális megjelenítőt használunk, az elemekre függőségi tulajdonságokat alkalmazhatunk az elhelyezésre vonatkozóan pl. UniformGrid esetén a Grid.Row és Grid.Column tulajdonságokkal szabályozhatjuk az elhelyezést ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:11

Stílusok dinamikus felületű alkalmazásokban a függőségi tulajdonságot nem a dinamikus vezérlőn, hanem a tárolóban kell megadnunk, stílus használatával, erre szolgál az ItemContainerStyle tulajdonság pl.: <ItemsControl ItemsSource="{Binding Fields}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <UniformGrid Rows="5" Columns="5" /> <!-- egy 5x5-ös rácsot használunk --> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <!-- a megjelenített elem --> </ItemsControl.ItemTemplate> ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:12

Stílusok dinamikus felületű alkalmazásokban <ItemsControl.ItemContainerStyle> <!-- az elemek megjelenítési stílusa --> <Style> <!-- az elemek elhelyezését stílus keretében adjuk meg --> <Setter Property="Grid.Row" Value="{Binding X}" /> <Setter Property="Grid.Column" Value="{Binding Y}" /> </Style> </ItemsControl.ItemContainerStyle> </ItemsControl> ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:13

Példa Feladat: Készítsünk egy dinamikus méretezhető táblát, amely véletlenszerű színre állítja a kattintott gombot, valamint a vele egy sorban és oszlopban lévőket. a felületen egy ItemsControl vezérlőben helyezzük el az elemeket, amely egy UniformGrid segítségével jelenít meg gombokat (Button) a nézetmodell megadja a mező típusát (ColorFieldViewModel), amely tárolja a sor (Row), oszlop (Column), szín (Color) értékeket, valamint a végrehajtandó utasítást (FieldChangeCommand), amely paraméterben az egész mezőt megkapja, így a nézetmodell könnyen tudja módosítani a megfelelő elemeket ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:14

Példa Tervezés: Application App Window View::MainWindow ViewModelBase ViewModel::ColorGridViewModel - _rowcount :Int32 - _columncount :Int32 - _random :Random + ColorGridViewModel() - GenerateFields() :void - FieldChange(ColorFieldViewModel) :void «property» + RowCount() :Int32 + ColumnCount() :Int32 + Fields() :ObservableCollection<ColorField> + ChangeSizeCommand() :DelegateCommand * ViewModelBase ViewModel::ColorFieldViewModel - _color :Color «property» + Row() :Int32 + Column() :Int32 + Color() :Color + FieldChangeCommand() :DelegateCommand ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:15

Példa Megvalósítás (MainWindow.xaml): <GroupBox Margin="2" Header="Méret:" > <StackPanel Orientation="Horizontal"> <TextBlock Text="Sorok:" Margin="5" /> <TextBox Text="{Binding RowCount}" /> <TextBlock Text="Oszlopok:" Margin="5" /> <TextBox Text="{Binding ColumnCount}" /> <Button Name="_ChangeSizeButton" Command="{Binding ChangeSizeCommand}" Content="Méretváltás" Width="80" /> </StackPanel> </GroupBox> ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:16

Példa Megvalósítás (MainWindow.xaml): <ItemsControl.ItemTemplate> <DataTemplate> <!-- megadjuk, milyenek legyenek az elemek --> <Button CommandParameter="{Binding}" Command="{Binding FieldChangeCommand}"> <Button.Background> <SolidColorBrush Color="{Binding Color}" /> </Button.Background> </Button> </DataTemplate> ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:17

Animációk A WPF támogatja animációk végrehajtását, amely lényegében függőségi tulajdonságok adott időn keresztül történő folyamatos módosítását jelenti az animáció típusa megadja a módosítani szánt érték típusát (pl. DoubleAnimation, ColorAnimation, ThicknessAnimation, ) az animációnál definiálnunk kell a kezdőállapotot (From), a végállapotot (To), valamint az időt (Duration) az animáció rendelkezhet tetszőlegesen sok köztes állapottal (KeyFrame), amelyekre egyéni kritériumok és időkorlátok szabhatóak, valamint megadható az animáció módja (lineáris, diszkrét, spline) ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:18

Animációk Az animációkat forgatókönyvekbe (StoryBoard) szervezzük a forgatókönyvvel megadható a célobjektum (Storyboard.Target, Storyboard.TargetName), illetve a céltulajdonság (Storyboard.TargetProperty) a céltulajdonság tetszőlegesen összetett lehet, pl.: Opacity, Canvas.Left, (Control.Foreground).(SolidColorBrush.Color), (Control.RenderStransform). (TransformGroup.Children[0]). (ScaleTransform.ScaleX) a forgatókönyvvel szabályozhatjuk a végrehajtást (Start, Stop) az ismétlődést (RepeatBehavior), gyorsulási és lassulási mértéket, esetleg visszajátszást (AutoReverse) ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:19

Animációk Pl.: <Storyboard Storyboard.TargetName="myButton" Duration="0:00:04"> <!-- forgatókönyv, amely 4 másodpercig fut a mybutton vezérlőre --> <DoubleAnimation From="1" To="0" Storyboard.TargetPropety="Opacity" /> <!-- áttetszővé tesszük --> <DoubleAnimation From="100" To="200" Storyboard.TargetPropety="Canvas.Left" /> <!-- eltoljuk jobbra --> </Storyboard> ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:20

Animációk végrehajtása Animációk végrehajthatóak kódban, valamint a felületen triggerek segítségével a trigger valamilyen esemény (EventTrigger), vagy értékváltozás (DataTrigger) hatására képes animációt futtatni (BeginAnimation), vagy tulajdonságot beállítani (Setter) elhelyezhetőek stílusban, vezérlőben, sablonban, pl.: <Button.Triggers> <EventTrigger RoutedEvent="MouseEnter"> <!-- MouseEnter eseményre fut le --> <BeginStoryboard Storyboard="" /> <!-- animáció futtatása --> </EventTrigger> ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:21

Példa Feladat: Készítsünk egy dinamikus méretezhető táblát, amely véletlenszerű színre állítja a kattintott gombot, valamint a vele egy sorban és oszlopban lévőket. adjunk animációt a gombokhoz, amelyben az egér felülhúzására (MouseEnter) a gomb elhalványul és összemegy, majd visszaalakul eredeti formájára ehhez 3 animáció szükséges (áttetszőség és a két méret) a relatív méretezés érdekében a gomboknak a transzformációját (RenderTransform) animáljuk, így annak összetett elérési útvonala lesz (pl. ((Control.RenderTransform). (ScaleTransform.ScaleX)) ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:22

Példa Megvalósítás (MainWindow.xaml): <Window.Resources> <Storyboard x:key="fieldsizestoryboard" Duration="0:0:2" AutoReverse="True"> <!-- animáció a mezőkre --> <DoubleAnimation Storyboard.TargetProperty="Opacity" From="1" To="0"/> <DoubleAnimation Storyboard.TargetProperty=" (Control.RenderTransform). (ScaleTransform.ScaleX)" From="1" To="0.5" /> ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:23

Példa Megvalósítás (MainWindow.xaml): <DataTemplate> <Button > <Button.Triggers> <!-- eseményre történő animálás --> <EventTrigger RoutedEvent="MouseEnter"> <BeginStoryboard Storyboard="{StaticResource fieldsizestoryboard}" /> </EventTrigger> </Button.Triggers> ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:24

Megjelenítés befolyásolás A triggerek akkor is hasznosak, ha a megjelenítést akarjuk szabályozni a nézetmodell adatai alapján, pl.: <Style TargetType="Button"> <!-- stílus gombokra --> <Style.Triggers> <!-- a szín adatkötés hatására változik --> <DataTrigger Binding="{Binding FieldText}" Value=""> <!-- ha nincs szöveg megadva --> <Setter Property="Background" Value="Gray" /> <!-- a gomb szürke lesz --> </DataTrigger> </Style.Triggers> ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:25

Példa Feladat: Készítsünk egy dinamikus méretezhető táblát, amely három szín között (piros, fehér, zöld) állítja a kattintott gombot, valamint a vele egy sorban és oszlopban lévőket. a színt a nézet adja meg, így a nézetmodell nem adhat vissza konkrét színt, csak egy sorszámot (0 és 2 között), amely alapján a szín állítható (ColorNumber) a színt trigger segítségével állítjuk a nézetben, a gomb stílusában, amely az érték függvényében színezi a gombot, (a gomb emellett animálódik, így DataTrigger és EventTrigger is hatni fog a vezérlőre) a triggereket az ablak erőforrásaként megadott stílusban hozzuk létre ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:26

Példa Megvalósítás (MainWindow.xaml): <Style x:key="buttonstyle" TargetType="Button"> <Style.Triggers> <!-- a színezés a nézetmodellben lévő adat függvényében fog változni --> <DataTrigger Binding="{Binding ColorNumber}" Value="0"> <Setter Property="Background" Value="Green" /> </DataTrigger> </Style> ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:27

Példa Feladat: Készítsünk egy Tic-Tac-Toe programot, amelyben két játékos küzdhet egymás ellen. javítsuk a megjelenítést azáltal, hogy karakterek helyett grafikus alakzatokat (Line, Ellipse, Rectangle) jelenítünk meg a nézetben a karakterek hatására változnak az elemek DataTrigger segítségével (amely a lehetséges Player értékeket figyeli) ugyanakkor továbbra is gombokat jelenítünk meg (amely kattintható), de felüldefiniáljuk a sablont (Template) egy egyedi felépítéssel (ControlTemplate), így a gomb megjelenése teljesen más lesz ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:28

Példa Megvalósítás (TicTacToeWindow.xaml): <Style.Triggers> <DataTrigger Binding="{Binding Player}" Value="O"> <Setter Property="Template"> <!-- a gomb sablonját cserélgetjük --> <Setter.Value> <ControlTemplate> <Canvas Background="White"> <Ellipse /> </Canvas> </ControlTemplate> </Setter.Value> ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 9:29