Stílusok I.

Stílusok I.

A stílusok szerepe:  A témák kialakításának egy nagyon fontos építőköve.  Például panelek esetén közös háttérszín. A stílusokra legegyszerűbben úgy érdemes gondolni, hogy azok valójában nem mások, mint tulajdonság halmazok. Fogunk egy köteg közös jellemzőt, és azokat egyetlen stílusba rakjuk. A stílus objektumot helyezzük el erőforrásként.  A stílusokat a Silverlightban a Style objektum segítségével lehet definiálni, miközben a TargetType tulajdonságot beállítjuk arra a típusra, amelyre a stílus készül. A stílusok esetében az egyes tulajdonságok beállítása a Setter-ek segítségével történik. Nézzünk erre egy példát is, hogy érthetőbb legyen:

 

Ha a tulajdonságokhoz tartozó érték komplex és így nem lehet azt egyetlen stringben leírni, akkor a Setter elem Value értéke 1-es, azaz attribútum helyett XML elemként használható. A Style tulajdonságot a FrameworkElement ősosztály definiálja, így például minden vezérlő és panel rendelkezik vele. A stílus alkalmazására nézzünk egy példát :

Stílusok öröklődése:  Nem kell mindig minden stílust a nulláról építeni. Számos esetben építkezhetünk valamilyen alapstílusból kiindulva, amelyből később leszármaztatva specifikusabb stílusokat lehet készíteni. A Silverlight 3 óta a Style objektum rendelkezik a BasedOn attribútummal, amely lehetővé teszi a hivatkozást egy ősstílusra, így szolgáltatva közös alapot más stílusok számára.

Ez a stílus rendelkezik, minden olyan tulajdonsággal, amivel a myBorderStyle, de felüldefiniálja a BorderBrush értéket, ami itt most piros szín lesz. Az ősstílus tulajdonságait felülírják a leszármazott stílusok tulajdonságai. Bármely stílus beállítását felüldefiniálja a közvetlenül a vezérlőn definiált, lokálisan meghatározott érték.

A következő alkalommal szintén a stílusokkal fogunk foglalkozni.

Stílusok és testreszabhatóság a Silverlightban II.

Stílusok és testreszabhatóság a Silverlightban II.

Az előzőleg félbehagyott erőforrásokkal foglalkozunk, majd ha lesz még idő, akkor áttérnénk a stílusokra.

Az erőforrások használata:

Az erőforrást a következő kódrészlettel tudjuk definiálni:

<UserControl.Resources>

<SolidColorBrush x:Key=”bgColor” Color=”Blue” />

</UserControl.Resources>

A fenti UserControl-on belül ez az erőforrás minden objektum számára látható és elérhető. Hivatkozni az x:Key attribútum értékén keresztül lehet rá a StaticResource nyelvi kiterjesztés használatával. Szemléltessük ezt egy példán keresztül, hogy érthetőbb legyen:

 

<Objektum PropertyNev=”{StaticResource resourceKey}” />

<Grid Background=”{StaticResource bgColor}” >

….

<Grid/>

SolidColorBrush brush = this.Resources[“bgColor”] as SolidColorBrush;

A this kulcsszónak itt a UserConrol-ra kell vonatkoznia. A resources gyűjtemény értéke mindig object típusú, ezért van szükség a típuskonverzióra (as operátor). A key attribútum értékének egyedinek kell lennie. Ezt az erőforrás lekötést Expression Blend-ben is meg tudjuk valósítani az Advanced Property Options segítségével.

Az erőforrás fájlok:

Az alkalmazáshoz épített stílusok újrafelhasználhatósága előbb – utóbb fontos cél lesz. Ezekre a problémákra megoldás a ResourceDictonary. Ezt az objektumot egy külső XAML fájlban definiáljuk, és a felhasználás során meghivatkozzuk. Egy ilyen xaml fájlra nézzünk is egy példát:

Ezt az erőforrás – könyvtárat használó App.xaml tartalma az alábbi módon nézhet ki, amennyiben az xaml fájlunk neve ResourceDictionary1.xaml:

Application szintre emeltük be a ResourceDictionary1.xaml és a ResourceDictionary2.xaml tartalmát. Így a fenti bgColor erőforrás az alkalmazás tetszőleges pontján meghivatkozható. Ezek az XAML fájlok átvihetők más projektekbe is. A ResourceDictionary objektumok létrehozását és kezelését az Expression Blend is támogatja.

Következő alkalommal áttérünk a Stílusokra.

 

 

 

Stílusok és testreszabhatóság a Silverlightban I.

Stílusok és testreszabhatóság a Silverlightban I.

 A mai világban rendkívül magasak az elvárások az alkalmazásokkal szemben. Ez alól nem kivétel a felhasználói élmény sem. Egy szoftver felhasználói élményét sok tényező együttes működése és hatása határozza meg. Az egyik legfontosabb és egyben legszembetűnőbb felhasználói felület a GUI (graphical user interface). Ebben a fejezetben megismerhetjük, hogy a silverlight miként támogatja az egységes felhasználó felület kialakítását.

Erőforrások a Silverlightban:

Az erőforrások szerepe: Először is ismerjük meg az erőforrás pontos definícióját. Az erőforrások olyan tetszőleges típusú objektumok, melyeket nem csak lokálisan, hanem egymástól független helyen is fel kívánunk használni. Egy ilyen erőforrás objektum lehet akár egy szín is.

Például, ha kiválasztunk egy Brush objektumot, és ezt több helyen is szeretnénk szerepeltetni. Mindenhová begépelhetjük,de gondban leszünk, ha később cserélni szeretnénk. Ebből az esetből kiindulva adódik a szituáció,hogy ezt a Brush objektumot el tudjuk eltárolni, és bármikor fel tudjuk alkalmazni.

Silverlightban egy statikus erőforrás a StaticResource. Azért statikus, mert jelen állás szerint a silverlightban nincs dinamikus erőforrás. Ez az erőforrás azt jelenti,hogy már forduláskor belekötésre kerül a hivatkozott objektum, és futás közben nem cserélhető le.

 Az erőforrások hozzáfélhetősége: Felvetődik a kérdés, hogy ezeket pontosan hol is definiáljuk? A válasz egyszerű: a Resources szekcióban. A resources tuljadonság a FrameworkElement ősosztályban került definiálásra, értéke egy IDictionary <string, object> típusú objektum. Az erőforrásokat több szinten is lehet definiálni:

  • Application szint
  • UserControl szint
  • Vezérlő szint

Azt, hogy az adott erőforrást melyik szinten definiáljuk, egyértelműen meghatározza, hogy mely objektumok számára lesz elérhető. Ha pl. az Application objektum Resources gyűjteményében helyezünk el egy erőforrást, akkor az az alkalmazásban mindenhol hivatkozható lesz. Egyfajta öröklődési láncról beszélhetünk.

Következő alkalommal megnézzük az erőforrások használatát, az erőforrás fájlait és rátérünk a stílusokra.

Második feladatok – 5. rész

A mai bejegyzés folyamán a maradék 2 animációt szeretném megcsinálni, illetve a kép beillesztéses kérdésre is választ szeretnék adni.

Kezdjük a képek beillesztésével.

Ennek megoldására találtam egy olyan PictureBox nevezetű Controlt. Ebbe könnyen bele lehet tenni a képet.

Nézzük meg közelebbről. Létrehozunk egy új projektet a Visual Studioban. Toolbox segítségével hozzáadunk egy PictureBoxot. Jobb oldalt a Properties-nél van egy Image “rész”, ahol a …-ra kattintva beilleszthetjük a képeinket. Ahhoz, hogy a képünk teljes módban látszódjon, mind a form méretét, mind a picturebox méretét át kell állítani. Ezt a Size-nál tehetjük meg. Íme a végeredmény:

A második animációnál az volt a feladat, hogy egy gomb lenyomására történjen valami animáció.

Ezt egy piros pöttyel oldottam meg, illetve egy gombbal, amit ha megnyomunk akkor jobbra, majd ha ismét megnyomjuk, akkor a pötty visszaugrik az eredeti pozícióba.

Na, de lássuk a kódot:

Létrehozok egy x változót, ez majd a mozgatásnál lesz segítségemre, az y változó pedig a pötty kirajzolásához kell. Majd létrehozom a gombot, egy segédváltozót, ami szintén a mozgatásnál segít. A konstruktorba a gomb feliratát helyeztem el, illetve magát a gombot, és hogy a gomb megnyomásnál hozzáadom a mozgatásos eseményt.

Az idozito metódusnál próbáltam volna felhasználni a villogó gombnál használt dolgokat, de valamiért állandó mozgásra nem sikerült a pöttyöt bírnom.

Az OnPaint metódussal rajzolódik ki egy pöttyünk, majd a main-nel a program futtatását tesszük lehetővé.

A kódot innen le lehet tölteni: ButtonToMove

 

Egy MVVM mintapéldával és az összetettebb animációval még adós vagyok.

 

Második feladatok – 4. rész

A mai napon a MVVM (Model-View-ViewModel) mintapéldához láttam hozzá. Először egy kép, hogy hogyan is néz ki egy ilyen minta:

A Model feladata az üzleti logikával való interakció fenntartása. Itt kérhetünk ki adatokat az adatelérési rétegből, kommunikálhatunk szolgáltatásokkal.

A View kizárólag az adott felhasználói felületet tartalmazza, mögöttes kódjában nem találhatók objektumok az üzleti logikából.

A sorból már csak a ViewModel maradt ki, melynek feladata a kettő összekapcsolása.

A példát magát is elkezdtem, egyelőre félkész állapotban van.

 

Inkább az animációkkal foglalkoztam, legelsőnek a villogó gombbal, ami kisebb fejtörést okozott, de végül sikerült megoldani a dolgot.

Nézzük a demót.

Elsőnek Visual Studioban létrehoztam egy új projektet. A Program.cs-be dolgoztam. Először a névtereket írtam be, hogy miket fogok használni a program során:

Utána létrehoztam a saját névteremet, az osztályt, majd a szükséges változóimat.

Majd következik a “szokásos” konstruktor, és ennek “részletezése” (2 részletben):

Majd a villogást úgy oldottam meg, hogy egy segédváltozót el kezdek növelgetni a végtelenbe egyesével, majd ha páros a szám, akkor nem látszódik a gomb, ha páratlan, akkor látszódik. Így egy villogó hatást értünk el.

Majd végül a main, amibe létrehozzuk a gombot.

Magát a projektet pedig innen lehet letölteni: Villogo_Gomb

 

Második feladatok – 3. rész

A 3 vezérlőnek (ListView, FlipView és Virtualization) néztem utána.

ListView:

  • ugyanaz, mint a GridView
  • a GridView a ListViewBase osztályból származik, listás adatok megjelenítésére szolgáló vezérlő, a Windows 8 szinte minden alkalmazásában megtalálható valamilyen formában

FlipView:

  • listás vezérlő
  • nem elemek listáját jeleníti meg egyszerre, hanem a listából mindig csak egyet, az aktuálisan kiválasztott, pozicionált elemet.
  • automatikusan biztosítja a navigációt az elemek között egérrel és érintésgesztusokkal egyaránt.

A Virtualization-ről nem esik szó a könyvben, illetve máshol se találtam róla információt.