WPF2009_24_01.qxd
3/6/2009
4:01 PM
Page 1
I. RÉSZ Az elsõ lépések 1. óra
Mi az a WPF (és mi nem)?
2. óra
A XAML mûködése
3. óra
Betûtípus-böngészõ
4. óra
Az alkalmazás-elrendezések kezelése
5. óra
Az alapvetõ vezérlõk használata
6. óra
Az adatkapcsolás alapjai
WPF2009_24_01.qxd
3/6/2009
4:01 PM
Page 2
WPF2009_24_01.qxd
3/6/2009
4:01 PM
Page 3
1. ÓRA Mi az a WPF (és mi nem)? A lecke tartalmából: • • • • • •
Mi az a WPF? Mikor érdemes a WPF-et használni? Milyen eszközökre lesz szükségünk? A WPF és más keretrendszerek viszonya A .NET változatai A Silverlight
Mi az a WPF? A WPF nagy. Annyira, hogy az már akár nyomasztó is lehet, fõleg az egymással összeköttetésben lévõ, folyton mozgásban lévõ részegységek miatt. A kérdésre adható legrövidebb válasz tehát az, hogy a WPF egy asztali alkalmazások grafikus felhasználói felületének (UI) .NET alapokon történõ kialakítására szolgáló alkalmazásprogramozási felület (API). Na, akkor most hosszabban.
WPF2009_24_01.qxd
3/6/2009
4:01 PM
Page 4
4 I. rész • Az elsõ lépések
Kiindulásként elmondjuk, hogy a WPF a Windows Presentation Foundation rövidítése. Fizikailag a .NET egyik alegysége, illetve a hozzá tartozó támogatóeszközök. Arra szánták, hogy Windows XP és Windows Vista rendszeren jól használható és kifinomult felhasználói felületek létrehozásához nyújtson egységes API-t. A WPF a webfejlesztésre jellemzõ elõnyöket, a stíluslapok használatát és a deklaratív felhasználói felület megvalósítására szolgáló jelölõnyelvet egyesíti a szolgáltatásgazdag internetes alkalmazások (Rich Internet Application, RIA) elõnyös oldalával: a méretezhetõ vektorgrafikák, az animációk és a multimédiás anyagok támogatásával. Ezekhez az elõnyökhöz a Windows alapú fejlesztés hagyományos elõnyei társulnak: az operációs rendszerrel történõ szoros együttmûködés és az adatkapcsolás (adatkötés, data binding) lehetõsége. Ezek az elvek felerõsödnek és egységesülnek a WPF-en belül. Ugyanakkor mindez nem adja vissza a WPF sokrétûségét. A WPF további lehetõségeket is rejt magában: térgrafikai megoldásokat, jobb tipográfiai lehetõségeket, valamint a PDF-hez hasonlóan sok helyütt használható dokumentumok kezelését. A WPF egységes API-t is jelent. Sok olyan dolog, ami a WPF-ben megvalósítható, korábban sem volt lehetetlen, de hihetetlenül bonyolult volt ezeket a dolgokat egyetlen alkalmazáson belül megoldani. A WPF nem csak arra teremt lehetõséget, hogy egymáshoz közelítsük az ezeket az egymáshoz csak lazán kapcsolódó feladatokat, hanem egységes szemléletû és szerkezetû API-t ad a kezünkbe mindehhez. A WPF persze csak része egy nagyobb egésznek. A .NET 3.0-val, annak részeként, három további programkönyvtárat is közzétettek. Mind a négy említett programkönyvtár azzal a céllal készült, hogy egységes szerkezetû és szemléletû API jöjjön létre az adott részterületen. Ugyancsak mély benyomást keltõ alkalmazásokat hozhatunk létre, ha a négy programkönyvtár közül többet is használatba veszünk a fejlesztés során. A WPF három testvérét az 1.1. táblázat mutatja be.
1.1. táblázat A WPF testvérkönyvtárai WCF
WF
CardSpace
A Windows Communication Foundation az üzenetközvetítésért felelõs. Ez az API nagyon leegyszerûsíti a hálózatkezeléssel és a kommunikációval kapcsolatos feladatokat. Lefed mindent a webes szolgáltatásoktól a folyamatok közötti kommunikáción keresztül az elosztott, Peer-To-Peer (P2P) alkalmazások fejlesztéséig. A WF a munkafolyamatokat támogató alkalmazások készítéséhez használható. Az alkalmazásokon belüli munkafolyamatok meghatározását egy jelölõnyelv segítségével valósítja meg, ezért a munkafolyamatok módosíthatók maradnak. A WF a fejlesztõknek megkönnyíti a testreszabott, munkafolyamat alapú feladatok kialakítását is. A négy könyvtár legkevésbé ismert képviselõjeként a CardSpace egy olyan azonosítási rendszert valósít meg, amelyet közösen használhatnak többek között a gépünkön futó és a web alapú alkalmazások.
WPF2009_24_01.qxd
3/6/2009
4:01 PM
Page 5
1. óra • Mi az a WPF (és mi nem)? 5
A WPF közvetlen elõdje a fejlesztõk számára a .NET 2.0 és korábbi változataiban megtalálható grafikai API, a Windows Forms. A Windows Forms a hagyományos Windows API grafikai függvényeinek elérését lehetõvé tevõ felügyelt burkoló. A WPF – minthogy a DirectX-re épül – alapjaiban különbözik tõle. A DirectX fõ felhasználási területe eredetileg a multimédiás lehetõségek kihasználása, illetve a játékprogramok készítése volt, ebbõl adódóan a WPF-fel lehetõség nyílik a Windows Formsban még kivitelezhetetlennek tartott látványelemek megvalósítására. Ugyanakkor a WPF használata azt is jelenti, hogy ha a programunk talál hardvergyorsításos lehetõséget, akkor azt ki tudja használni. A WPF azért néhány vonásában hasonló a Windows Formshoz (sõt az ASP.NET Web Formshoz is). A Microsoft mellékelte hozzá az alapvetõ vezérlõk – szövegmezõk, gombok – könyvtárát, valamint néhány, már ismerõs dologgal is találkozhatunk benne, például az adatkapcsolás lehetõségével és az úgynevezett háttérkódfájlokkal. Ezek tovább finomulva kerültek át a WPF-be.
A WPF szolgáltatásai Szánjunk pár percet a WPF fõbb szolgáltatásainak áttekintésére! A késõbbi órák folyamán ezek mindegyikét mélyrehatóbban tárgyaljuk.
Deklaratív felhasználói felület A WPF lehetõvé teszi a felhasználói felület jelölõnyelvvel történõ kialakítását. A WPF jelölõnyelvének neve XAML, kiejtve kszemel, ami az angol camel (kemel) szóra rímel. A második órán beleássuk magunkat a XAML rejtelmeibe, mindazonáltal az alapelvek ismerõsek lesznek, amennyiben volt már dolgunk a HTML-lel. A XAML a HTML-nél sokkal többre képes jelölõnyelv, ráadásul az értelmezése lényegesen egységesebb. A Visual Studio, illetve az Expression programcsalád néhány tagja közvetlenül képes XAML-kód elõállítására. A XAML a programozók számára a látványtervezõkkel közös nyelvet teremt.
Intelligens elrendezés Egy alkalmazás képernyõre kerülõ részeinek elrendezése bonyolult feladat, fõleg a felhasználók rendelkezésére álló kismillió megjelenítési lehetõség fényében. A WPF a felhasználói felület elemeinek pár kattintással megvalósítható elrendezését egy bõvíthetõ elrendezésrendszerrel segíti elõ. A felhasználói felület az elrendezés megadásától függõen átméretezhetõ, állítható. A negyedik órán részletesebben tárgyaljuk ezt a témakört.
1
WPF2009_24_01.qxd
3/6/2009
4:01 PM
Page 6
6 I. rész • Az elsõ lépések
Átméretezhetõ grafikák A WPF grafikai elemei nem raszteresek, hanem vektor alapúak. A vektorgrafikai elemek eredendõen átméretezhetõk, és rendszerint a velük összemérhetõ raszteres elemeknél kevesebb tárhelyet igényelnek. A WPF kiterjedten támogatja a rasztergrafikát is, de a felhasználói felületek létrehozására a vektorgrafika jelent igazán remek megoldást. A vektorgrafika a Világhálón mostanra népszerûvé vált, elsõsorban az Adobe Flash, kisebb mértékben az SVG-re (Scalable Vector Graphics) épülõ technológiának köszönhetõen. A WPF alapú alkalmazások elõnye a fejlesztõ szempontjából a minõségromlás nélküli átméretezhetõségében rejlik.
Vektor és raszter A rasztergrafika olyan képet jelent, amelyet képpontok négyzethálójaként tárolunk, és minden képponthoz színt rendelünk. Az általunk ismert legtöbb grafikus fájlformátum ilyen. Ide tartozik többek között a GIF, a JPEG, a BMP és a PNG formátum. A rasztergrafikus állományokat szokás bitképeknek (bitmap) is nevezni. (A BMP fájlformátum neve ne tévesszen meg senkit: a bitkép a képadatok tárolásának raszteres módját jelenti.) Tegyük fel, hogy van egy 100 x 100 képpontos raszterképünk, amely fehér háttéren kék kört ábrázol. A számítógép betölti a 10 000 képpontból álló képet a memóriájába, majd megjeleníti a képernyõn. Ez rengeteg adatot jelent egy ennyire egyszerû kép esetében is. Képzeljük el, hogy ugyanez a kép kell nekünk, de két-háromszor nagyobb méretben. A képpontok száma ekkor hatványozottan sokszorozódik meg. Ha el tudnánk mondani a számítógépnek az alakzatok kiterjedését, helyét és színét, akkor sokkal kevesebb adatra lenne szükség, tehát ebben a megközelítésben a rasztergrafika pazarlónak minõsül. További gond a rasztergrafikával, hogy nem méretezhetõ át jól: a kép minõsége észrevehetõen romlik, fõleg nagyításkor. Képzeljük el, hogy meg akarjuk kétszerezni a saját magunkat ábrázoló 100 x 100 képpontos kép méretét. Ahhoz, hogy a méretét 200 x 200 képpontra növeljük, 390 000 további képpont szükséges, a hiányzó képpontokat pedig a meglévõk alapján kell létrehozni. A vektorgrafika esetében az elõzõ módszertõl eltérõen mértani alakzatokat tárolunk. A vektoros képet tároló adatszerkezet éppen csak ahhoz tárol elegendõ információt, hogy a számítógép meg tudja rajzolni a képet. A fehér háttér elõtti kék kör vektoros
WPF2009_24_01.qxd
3/6/2009
4:01 PM
Page 7
1. óra • Mi az a WPF (és mi nem)? 7
képe a kör vízszintes és függõleges helyzetét tartalmazza, valamint a sugár nagyságát és pár további adatot a kör kék, illetve a háttér fehér színére vonatkozólag. Amikor a számítógép kirajzolja a képet, a képpontok helyét és színét menet közben számolja ki. Ez tehát nem jelent különbséget a 100 x 100 és a 200 x 200 képpontos kör között, és a kép megrajzolása lényegesen kevesebb adat felhasználásával történik, mint a raszteres kép esetében. Alapvetõ törvény, hogy a vektorgrafika alkalmasabb mértani alakzatok, illetve rajzfilmszerû figurák képeinek tárolására, a raszterképek pedig jobban használhatók fényképek és valósághû ábrák tárolására.
Sablonok A WPF-ben a felületeinkhez könnyedén készíthetünk többször felhasználható elemeket. Kétféle sablon létezik a WPF-ben: vezérlõsablonok és adatsablonok. A vezérlõsablonok a vezérlõelemek kinézetének átalakításában vannak segítségünkre. (Az ASP.NET-fejlesztõkhöz szólva: a vezérlõsablonok a vezérlõadapterekhez hasonlítanak.) Például ha az alkalmazásunkban minden listbox (listamezõ) elemnek kék hátteret és piros keretet akarunk adni, akkor módosíthatjuk a listbox vezérlõelemek sablonjának beállításait. A vezérlõsablonok a látványtervezõk dolgát is megkönnyítik: a listbox elemeknek egy vezérlõsablonnal határozhatják meg a kinézetét, a fejlesztés folyamatára pedig mindez nincs hatással – legfeljebb egy kicsit. Az adatsablonok is hasonlóan mûködnek, annyi különbséggel, hogy a vezérlõelemek kinézete helyett az adatok képernyõn történõ megjelenítését határozzák meg. Képzeljük el, hogy egy emberekkel dolgozó alkalmazásról van szó, mondjuk egy partnernyilvántartóról, és az egyes személyek adatait a Person osztály példányaiban tároljuk. Ekkor létrehozhatunk olyan adatsablont, amely meghatározza, hogy a Person osztály példányai hogyan jelennek meg a felhasználói felületen. Például a Person osztály egy példánya megjelenhet fényképes névjegyként, rajta a vezetéknévvel, a keresztnévvel és a telefonszámmal. Ha létrehozunk egy ilyen adatsablont, akkor a WPF mindig a megfelelõ adatsablont fogja használni, amikor egy Person-példányt valamilyen felhasználói felületi elemhez – mondjuk egy listamezõhöz – kapcsolunk. Ha listákkal vagy egyéb adatgyûjteményekkel akad dolgunk, rá fogunk döbbenni, hogy az adatsablonok mennyire hasznosak.
Kötések Ha a WPF-fel kapcsolatosan „kötést” vagy „kapcsolást” emlegetünk, szinte azonnal az adatkapcsolás (adatkötés) elvébe botlunk. Az adatkapcsolás már a Windows Forms, illetve az ASP.NET Web Forms idejében is népszerû volt, és megmutatta, milyen jól használható. És bár a WPF jelentõs javításokat hozott az adatkapcsolás területén is –
1
WPF2009_24_01.qxd
3/6/2009
4:01 PM
Page 8
8 I. rész • Az elsõ lépések
olyannyira, hogy a felmenõi nem versenyezhetnek vele –, egyéb dolgok deklaratív kapcsolását is lehetõvé teszi: parancsokét, billentyûkombinációkét, animációkét és eseményekét. Például megoldható, hogy a „beillesztés” parancsot egy gombhoz kapcsoljuk.
Stílusok A WPF akkor fénylik igazán erõs fénnyel, ha az alkalmazás megszépítéséhez érünk. Lehetõvé teszi például egy szövegmezõ hátterének pirosra színezését vagy egy gomb körülvételét vastag kék kerettel. A WPF stílusai hasonlóak a HTML rangsorolt stíluslapjaihoz (CSS). De – ismét elmondjuk – a WPF stílusai sokrétûbbek, és egységesebben értelmezettek. Lehetõvé teszik az összes elvárható stíluselem beállítását: a külsõ és belsõ margókét, a helyét, a színét, és így tovább. A stílusok azonban használhatók nem látható tulajdonságok beállítására is. A stílusok is könnyen újrahasznosíthatók, és ha együtt alkalmazzuk õket a sablonokkal, akkor igazán varázslatos dolgokra válunk képessé.
Kioldók A WPF-ben a sablonok és a stílusok egyaránt képesek az eseményvezérlõ kioldók (trigger) tájékoztatására. A kioldók arra valók, hogy a WPF-nek ilyesféle parancsokat adjunk: „Ha az egér a gomb fölé ér, akkor változtasd a hátteret lilává.” Más szóval, a kioldók lehetõvé teszik, hogy az állapotváltozásokat kódból kezeljük, de animációk elindítására is kiválóan használhatók.
Animáció A WPF animációs keretrendszere nagyon jó benyomást kelt, és lényegesen hasznosabb, mint azt gondolnánk. A WPF legtöbb tulajdonsága animálható, és a WPF támogatja az idõszalagokat, a kulcskockákat és a képkocka-közbeszúrást (interpoláció). Az animációk a sablonokkal és a stílusokkal könnyen használhatók együtt. Példának okáért megadhatunk egy gombhoz olyan stílust, amely animálja a gombot, ha fölé kerül az egérmutató. A használható lehetõségek el fogják kápráztatni a Flash-ben dolgozó fejlesztõket és látványtervezõket.
WPF2009_24_01.qxd
3/6/2009
4:01 PM
Page 9
1. óra • Mi az a WPF (és mi nem)? 9
3D Végezetül, a WPF lehetõvé tesz némi alapszintû térbeli modellezést és animálást. „Alapvetõ”, mondom, hiszen a WPF nem nagyteljesítményû háromdimenziós alkalmazások létrehozására való. Nem fogunk háromdimenziós mászkálós-lövöldözõs játékot írni a WPF-fel. (Ha ez volna a tervünk, vessünk egy pillantást a Microsoft XNA platformjára). Mindazonáltal a háromdimenziós lehetõségek kiforrottak, és bármely felhasználói felületnek könnyen a részévé tehetõk. Ebben a könyvben nem tárgyaljuk a WPF térgrafikai lehetõségeit, mindössze egy alapszintû bevezetés erejéig, amely a függelékek között kapott helyett.
Mikor érdemes a WPF-et használni? A WPF és a .NET 3.0 részét képezõ testvérkönyvtárai jól megtervezett és megvalósított alkalmazás-programozási felületeket nyújtanak. Sok programozási elvet egyesítenek, és egységes egészként sok fejlesztési feladatot könnyítenek meg. Ugyanakkor a WPF nem szükségszerûen a legjobb választás minden projekt számára. Néhány alkalmazást egyszerûbb a Windows Forms használatával kialakítani és karbantartani. A WPF-fel való munkának azonban sok az elõnye. Minden fejlesztõnek, aki Windowsra készít alkalmazásokat, érdemes megismernie a WPF-et, mert egyszer eljön az idõ, amikor a WPF megérik a Windows Forms teljes felváltására. Már sok lényeges képességét megismertük a WPF-nek, a következõkben néhány olyan helyzetet vázolunk fel, ahol a WPF fényesen bizonyíthat: • A projektünknek szorosan együtt kell mûködnie a látványtervezõkkel. A XAML nyelv és az azt támogató eszközök használata a segítségünkre lehet. Miután a látványtervezõk és a fejlesztõk megismerték az eszközök használatát, a csapatunk hatékonysága sosem tapasztalt mértékben megnõhet. • Az alkalmazásunk multimédiás anyagokat használ. Ha mozgóképet és hangot kell az alkalmazásba beépítenünk, mindenképpen érdemes megfontolnunk a WPF használatát. • Az alkalmazásunk célhardvere támogatja a DirectX 9-es és késõbbi változatait. A WPF a DirectX technológiáján alapul, így az alkalmazásaink kihasználják a hardveres gyorsítást. • Az alkalmazásunknak támogatnia kell olyan tipográfiai megoldásokat, mint például az OpenType, amelyek nem használhatók a Windows Formsszal történõ fejlesztéskor. Végezetül pedig: fejlesztõként többet végezhetünk, kevesebb idõ alatt. Még ha nem is hatott meg bennünket a WPF sok csillogó-villogó újdonsága, kisebb erõfeszítésünkbe kerül majd a minõségi programok elõállítása. Könyvünk elsõ részében alá is támasztjuk ezt a kijelentést, amikor elkészítünk egy egyszerû, ámde hasznos segédprogramot, pusztán a jelölõnyelv használatával.
1
WPF2009_24_01.qxd
3/6/2009
4:01 PM
Page 10
10 I. rész • Az elsõ lépések
A WPF összehasonlítása egyéb lehetõségekkel Ha kizárólag .NET alapon fejlesztünk, akkor összesen két másik megfontolásra érdemes választásunk lehet: a Windows Forms és az ASP.NET. Az elõzõekben már összehasonlítottuk a WPF-et és a Windows Formst. A Windows Forms két igazi elõnnyel bír: érettebb, teljesebb a vezérlõkönyvtára, és a külsõ fejlesztõeszközök általi támogatottsága is jelentõsebb. A WPF még mindig az új fiú az alkalmazásfejlesztés terén, tehát a WPF-et támogató eszközök és egyéb anyagok tömeges kifejlesztésére még nem volt idõ. Az ASP.NET-tel történõ összehasonlításnak már nagyobb létjogosultsága van. A kérdés középpontjába ekkor a megcélzott alkalmazói kör és a termék hozzájuk történõ eljuttatása kerül. A WPF jelen idõ szerint Windows operációs rendszert futtató gépeken használható, ám efféle korlátozás nyilván nem jön szóba web alapú alkalmazásokról beszélve. A WPF megköveteli a .NET keretrendszer 3.0-ás változatának telepítését, sõt magát az alkalmazást is telepíteni kell. Ha az alkalmazásunk amúgy is központosított, és igényel kiszolgálóoldali mûveleteket is, akkor könnyen lehet, hogy a sok számítógépre történõ telepítés és karbantartás összetettségét megspórolva magunknak, webalkalmazás fejlesztésébe fogunk. A .NET világának határait elhagyva hasonló lehetõségeket találhatunk az Adobe Flash használatában, fõleg ha valamilyen multimédiás tartalom avagy animáció kerül a képbe. Az elmúlt idõszakra visszatekintve azt látjuk, hogy a Flash csak a webes alkalmazásait tekintve bizonyult igazán hasznosnak. Nem elfelejtendõ azonban, hogy az Adobe AIR projekt célja éppen a több rendszeren használható asztali alkalmazások kifejlesztésének elõsegítése. Persze a Flash számos figyelemre méltó hátránnyal küzd. A fejlesztõi környezete elmarad a .NET hatékonysága mögött, még akkor is, ha igencsak el nem ítélhetõ módon a Flash egyre inkább fejlesztõbaráttá válik. A Flash-sel használható vezérlõkönyvtárak lényegesen korlátozottabb tudásúak, és ormótlanabbak, mint .NET-es megfelelõik. Persze lehetséges, hogy az AIR majd képes lesz némi egészséges versengés kialakítására a WPF-fel.
A .NET keretrendszer részei A .NET világában sajnálatosan nagy a különféle szakkifejezések és változatok száma, és különösen nehéz rendet tenni köztük. Szánjunk egy percet a .NET keretrendszer részeinek áttekintésére, illetve arra, hogy milyen viszony áll fenn a változatszámaik között. A legegyszerûbb, ha a .NET keretrendszerre termékcsaládként tekintünk, benne a futásidejû értelmezõvel, a fordítóprogramokkal, és az általános kódkönyvtárakkal.
WPF2009_24_01.qxd
3/6/2009
4:01 PM
Page 11
1. óra • Mi az a WPF (és mi nem)? 11
A futásidejû értelmezõ a Common Language Runtime, avagy CLR. Arról a virtuális géprõl van szó, amelyen a .NET-alkalmazások futnak, és amely olyan alapvetõ feladatot lát el, mint a memóriakezelés, a szemétgyûjtés, valamint a biztonsági mûveletek. E könyv célkitûzésein kívül esik a CLR kimerítõbb tárgyalása, de annyit érdemes tudnunk, hogy a CLR a .NET környezet futásidejû értelmezõje, és azt is, hogy a változatszáma eltér a .NET keretrendszerétõl. A két meghatározó programozási nyelv a .NET világában a C# és a Visual Basic.NET. Mindkettõ önálló változatszámmal bír, amelyek eltérnek a .NET keretrendszerétõl, mint egésztõl. A C# jelenlegi változata a 3.0, a Visual Basic pedig a 9.0-nál tart. Hallani fogunk a .NET alaposztályainak könyvtáráról, a Base Class Library-ról vagy BCL-rõl, illetve a keretrendszeri osztálykönyvtárról (Framework Class Library, FCL) is. A BCL a .NET programnyelvcsalád bármely nyelve számára elérhetõ. Ezek az osztályok legtöbb esetben a System névtérben találhatók. Az FCL szakkifejezés a BCL-en kívül jelenti a Microsoft névtér alapkönyvtárait is. A kettõ közötti különbségtétel persze néha hajhulláshoz vezet, sokan pedig össze-vissza cserélgetik a két kifejezést. Az 1.1. ábra azt mutatja, hogy miként változtak ezek a „termékek” a .NET keretrendszer 2.0 óta kiadott változatokban. A tisztánlátásunkat javítandó néhány dolgot kiemelünk: • A 2.0-ás változat óta nem változott a CLR, így aztán a .NET keretrendszer alapvetõ mûködési jellemzõi sem változtak. • A C# 3.0 és a Visual Basic.NET egyaránt bájtkódba (más szóval IL-be, ami az Intermediate Language – köztes nyelv – rövidítése) fordít, igény szerinti (justin-time) fordítással a CLR 2.0-ban. A .NET 3.5 új nyelvi fejlesztései a megfelelõ fordítóprogramokhoz szükséges módosítások. • A WPF egy osztálykönyvtár. Az alatta dolgozó CLR-en semmi nem változott. Ez annyit tesz, hogy a .NET keretrendszer 3.0-ás változata a 2.0-ás változattól csak az új könyvtárak bekerülését tekintve tér el.
1.1. ábra A .NET keretrendszer változatainak története
1
WPF2009_24_01.qxd
3/6/2009
4:01 PM
Page 12
12 I. rész • Az elsõ lépések
WPF-eszközök Ebben a könyvben elsõsorban a Visual Studio 2008-cal dolgozunk, pontosabban annak is az Express Edition változatával, amelyet a Microsoft térítésmentesen ad közre. A Visual Studio 2008 a WPF-alkalmazások fejlesztését közvetlenül támogatja. A Visual Studio 2008 Express Edition letölthetõ a www.microsoft.com/express webhelyrõl, sok egyéb erõforrással együtt.
A Visual Studio 2005-tel is lehetséges WPF-alkalmazások fejlesztése, de telepíteni kell hozzá a WPF-bõvítményeket, amelyekbõl sohasem adtak ki végleges változatot. Erõsen javallott tehát a 2008-as változatra áttérni, már amennyiben ez egyáltalán lehetséges. Használható a SharpDevelop (másik nevén #develop) is. Egy nyílt forrású egyesített fejlesztõkörnyezetrõl van szó, amely támogatja a .NET 3.0-ás WPF-alkalmazások fejlesztését. Kiforrott segédeszközrõl van szó, de a Visual Studio WPF-támogatásának szintjét nehéz túlszárnyalni. A WPF-alkalmazások készítése során a második legfontosabb eszköz a Microsoft cég Expression Blend nevû terméke. A Blend a fejlesztõk helyett a látványtervezõknek készült. Ugyanazokkal az állományokkal dolgozik, mint a Visual Studio, tehát a Blendet használó látványtervezõ és a Visual Studiót használó programfejlesztõ dolgozhat ugyanazon a projekten, ugyanannak az elvégzésén, ugyanazokkal a fájlokkal. A Blend némileg az Adobe Flash egyesített fejlesztõkörnyezetére emlékeztet: megtaláljuk benne a rajzeszközöket, az animációs idõszalagokat, a palettákat és egyéb látványtervezõi eszközöket. Bár nem nekik szánták, mégis javaslom, hogy a programfejlesztõk is ismerjék meg a Blend használatát. A Blend egyébiránt az elsõ olyan Microsoft-termékek közé tartozik, amelyhez felhasználták a WPF lehetõségeit. A Mobiform Software nevû cég készítette a szintén a WPF-en alapuló felhasználói felületek tervezésére szolgáló Aurora nevû alkalmazást, amely az Expression Blendhez hasonló lehetõségekkel bír. Figyelemreméltó képessége, hogy az Aurora beágyazható más WPF-alkalmazások belsejébe. Tehát, ha beépített XAML-szerkesztõvel rendelkezõ alkalmazás fejlesztése a feladat, mindenképpen jusson eszünkbe az Aurora. Az Expression Design szintén a Microsoft terméke. Vektor alapú grafikai tartalom készítésére való, hasonlóan az Adobe Illustratorhöz vagy az Inkscape-hez. Az Expression Design segítségével emblémákat, ikonokat és a WPF-fel használható egyéb illusztrációkat hozhatunk létre. A program közvetlenül XAML fájlként tárolja a rajzokat, amelyeket így azonnal felhasználhatunk a WPF-ben. Az Expression Design és a Blend közötti egyik eltérés, hogy a Blend kizárólag felhasználói felületek tervezésére készült.
WPF2009_24_01.qxd
3/6/2009
4:01 PM
Page 13
1. óra • Mi az a WPF (és mi nem)? 13
Sok egyéb, két-, illetve háromdimenziós grafikai alkalmazás rendelkezik mostanra olyan bõvítménnyel, amely lehetõvé teszi a XAML-ben történõ mentést. (Ne feledjük, hogy a XAML a WMF saját nyelve.) Ilyenek például az Adobe Fireworks, az Adobe Illustrator, az Inkscape, a Maya, a Blender és a Lightwave. Az elõbb említett 3D-eszközökön kívül legalább egy, kifejezetten a WPF-hez írt, háromdimenziós tartalmat szerkeszteni tudó program létezik: a ZAM 3D az Electric Rain nevû cégtõl. A ZAM 3D a Flash-hez írt Swift 3D nevû termékhez igencsak hasonló. A legtöbb térgrafikai szerkesztõprogramtól a könnyebb használhatóságában különbözik, eképpen a háromdimenziós alkotásba belekóstolni vágyó, WPF-fel foglalkozó programfejlesztõknek talán a legjobb kiindulási pontot jelentheti. Utolsóként a Kaxaml nevû alkalmazást említjük meg. A Kaxaml olyan pehelysúlyú XAML-szerkesztõ, amely azonnal, „élõben” nyújt elõnézeti képet a mûvünkrõl. Magyarul, ahogy írjuk a XAML-kódot, azonnal látjuk, hogy milyen lesz az eredmény. Meglehetõsen kézreálló segédeszköz, és e könyv írásakor még ingyenes. Látogassunk el a www.kaxaml.com webhelyre, és töltsük le a Kaxaml-t. Bár ez a könyv a Visual Studióra támaszkodik, esetleg hasznos lesz, ha a megírt XAMLkódot megnézzük a Kaxmal-ben is. A Visual Studio elõnézeti lehetõségével szemben a Kaxaml igazi WYSIWYG (What You See Is What You Get – „azt kapod, amit látsz”) szerkesztõ. Sok egyéb eszköz, segédprogram, vezérlõkönyvtár és más jelenik meg minden nap. Vannak közöttük kereskedelmi termékek egyéb cégektõl, és vannak közösségi fejlesztésû, ingyenes darabok is. Mindenképpen nézzük át a függelékben lévõ további forrásokat. Az egyszerûség kedvéért ebben a könyvben csak a Visual Studio 2008 Express Editiont használjuk.
A WPF és a Silverlight Amíg a WPF asztali alkalmazások készítésére szolgál, a Silverlight a szolgáltatásgazdag internetes alkalmazások (RIA) fejlesztésének egyik lehetséges eszköze. A Silverlight ilyen értelemben az Adobe Flash ellenfele, és a multimédia használatát, a rendszerek közötti átjárhatóságot, a gyors letöltést, illetve a telepítési igény csökkentését tartja szem elõtt. A Flash-hez hasonlóan a Silverlight alapú alkalmazások is a böngészõprogramon belül futnak. A Microsoft szándékosan tervezte a Silverlightot a WPF-hez nagyon hasonlóra, bár két külön termékrõl van szó. Az az igazság, hogy a Silverlight korai neve WPF/E, azaz Windows Presentation Foundation/Everywhere (WPF/Mindenhol) volt. Az egyik technológiában jártas fejlesztõk repülõrajttal indulhatnak a másikban.
1
WPF2009_24_01.qxd
3/6/2009
4:01 PM
Page 14
14 I. rész • Az elsõ lépések
A WPF-hez hasonlatosan a Silverlight is a XAML nyelvet használja a felhasználói felületek kialakítására. Az 1.0-ás változatban a Silverlight-alkalmazások JavaScript és XAML-kódot tartalmazó szövegfájlokból állnak, a Silverlight 2.0-ban ugyanakkor már egy lényegesen hatékonyabb futásidejû értelmezõ fog helyet kapni, valamint egy a .NET BCL-jéhez hasonló alaposztálykönyvtár. Kedvenc programozási nyelvünkön írhatunk majd Silverlightalkalmazásokat, amelyeket aztán a terjesztésüket megelõzõen egy futásidejû értelmezõ által feldolgozható kóddá fordítunk. A Silverlight 2.0 sokkal hasonlóbb kinézetû lesz a WPF-hez, de soha ne feledjük a fennálló jelentõs különbségeket. Majdnem bizonyos, hogy a Silverlight nem fogja a WPF összes lehetõségét támogatni. Ehhez hasonlóan, a Silverlightban írt kód is lényeges változtatásokra szorulhat, mielõtt egyszerû .NETalkalmazásként lefordíthatnánk. Mindig jusson eszünkbe, hogy a Silverlight futásidejû értelmezõje nem azonos a CLR-rel.
Összefoglalás A Windows Presentation Foundation képviseli az asztali alkalmazások fejlesztésének jövõjét. A hozzá tartozó API hatalmas, lehetõségei pedig számosak. A WPF-ben jártas szakemberré válni némi idõbe telik, de a WPF fõbb képességeinek megismerése és megértése nagyban növelheti a programfejlesztõ termelékenységét. A WPF a programfejlesztõk és látványtervezõk közös munkájának elõsegítése terén is jelentõs lépést jelent.
Kérdezz-felelek K: Van valamilyen meggyõzõ érv a WPF használatán alapuló alkalmazásfejlesztés
ellen? V: Egy WPF-alkalmazás általában több erõforrást igényel, mint a Windows
Formsszal készült társai. Ha gyengébb hardverû számítógépeken tervezzük az alkalmazás futtatását, érdemes a teljesítménnyel kapcsolatban elõtanulmányokat folytatnunk, még mielõtt rászánnánk magunkat a WPF-re történõ áttérésre. Ezen felül a .NET 3.0, illetve 3.5 egyelõre nincs minden gépre telepítve, holott ez a WPF alapú alkalmazások futtatásának elõfeltétele (a .NET 3.0 a Windows Vista és a Windows Server 2008 rendszerekkel együtt települ). K: Soknak tûnik a WPF-fel kapcsolatos megtanulnivaló. Meg kell tanulnom mindent, mielõtt a WPF-et használni tudnám? V: Nem. Ahogy hangsúlyoztuk, a WPF hatalmas. Ugyanakkor a könyv elsõ részének végéhez közeledve lassan sejteni fogjuk a WPF igazi elõnyeit, és használható alkalmazások fejlesztésébe foghatunk.
WPF2009_24_01.qxd
3/6/2009
4:01 PM
Page 15
1. óra • Mi az a WPF (és mi nem)? 15
Ismétlés Ismétlõ kérdések 1. Milyen elõnyökkel jár, ha a felhasználói felület tervezése során jelölõnyelvet
használunk? 2. Milyen operációs rendszereket támogat a WPF? 3. Mi a különbség és mi a hasonlóság a WPF és a Silverlight között? 4. A Visual Studio 2008 mellett melyik Microsoft-fejlesztõeszközzel érdemes
megismerkednie a programozóknak?
Válaszok 1. A jelölõnyelvek – mint a XAML vagy akár a HTML – használata azért gyümölcsözõ,
mert közös pontot jelent a fejlesztõk és a látványtervezõk kapcsolatában. Ezen felül a jelölõnyelv használata az alkalmazásfejlesztés deklaratív megközelítését jelenti, ami gyakran jelent könnyebbséget a fejlesztés során csakúgy, mint a kód karbantartásakor. 2. A WPF jelenleg a Windows XP, Windows Vista és Windows Server 2008 rendszereken használható. 3. A WPF a .NET keretrendszer része, és asztali alkalmazások grafikus felhasználói felületének kialakítására szánták. A Silverlight célterületét a böngészõprogramon belül futó, úgynevezett szolgáltatásgazdag internetes alkalmazások (RIA) jelentik. A Silverlight futásidejû értelmezõje más, mint a .NET futásidejû értelmezõje. A Silverlight és a WPF egyaránt a XAML nyelvet használja a felhasználói felületek kialakítása során. A Microsoft szándékosan készítette a Silverlightot és a WPF-et annyira hasonlóra, amennyire csak lehetséges: így a programfejlesztõk és a látványtervezõk az egyik rendszer ismeretében könnyen boldogulnak a másikkal is. 4. A WPF-fel dolgozó fejlesztõknek legalább némileg ismerniük kell a Microsoft Expression Blend nevû programját. Ezt az alkalmazást elsõsorban a látványtervezõknek szánták, de gyakran veszik hasznát a programfejlesztõk is. Az Expression Blend a Visual Studióval megegyezõ fájlformátumokat használ, tehát a megoldások és a projektek állományait mind a két alkalmazás képes használni.
1