Személyes eszközök
Keresés

 

A InfoWiki wikiből


Tartalomjegyzék

XAML és a KÓD kapcsolata

A XAML file-unkat akár egy jegyzettömb segítségével is leírhatjuk. Leírás után az alábbi formában lehet felhasználni:

XAML fordítása BAML-re

A BAML a bináris formája a XML file-nak. Az XML file alapjaiban text alapú, feldolgozása struktúrált felépítésének köszönhetően megoldható, de lassú. A BAML ellenben tokenizált XAML, bináris alapokon, így szerkesztése nehézkes (lehetetlen), viszont feldolgozása jelentősen gyorsabb.

A cél a text alapú XAML file BAML-re alakítása. Ehhez a XAML-nek természetesen szintaktikailag jól kell kinéznie (well-formed xml).

A fordítás menete az alábbi

  • a XAML file BAML-re alakítása a xamlc.exe segítségével (xaml compiler)
  • ennek során a részleges osztályok (partial class) forráskódját is generálja
    • mezőket helyez el ezen részleges osztályban
    • kódot generál, amely induláskor betölti majd a BAML-t

A generált BAML file-t, és a generált partial class kódot a Visual Studio továbbfordítja a csc.exe segítségével, és előállítja a megfelelő assembly-t, mely tartalmazza a baml file-t mint erőforrás.

XAML használata kódból

Amennyiben a XAML file-t nem szeretnénk fordítani és beágyazni az assembly file-ba, meghagyhatjuk eredeti formájában is. A kulcs a XamlReader.Load(...) metódus. Kódból az alábbi módon lehet ekkor működtetni:

FileStream s = new FileStream("Window1.xml", FileMode.Open);
DependencyObject rootElement = (DependencyObject)XamlReader.Load(s);

A betöltött XAML file tartalma egy tetszőleges kontroll Content-je lehet (amennyiben a XAML root eleme ezt lehetővé teszi):

this.Content = rootElement;

Ha a root elem egy form, akkor azt a betöltés után akár azonnal meg is lehet jeleníteni:

(rootElement as Window).ShowDialog();


Mivel ekkor nem generálódtak le az x:Name jellegű mezők és nincsenek összekapcsolva a XAML-beli párjukkal, így ezeknek a kezelését is kódból kell ellátni:

button1 = (Button)LogicalTreeHelper.FindLogicalNode(rootElement, "button1");

Valamint az eseménykezelők sincsenek feliratkozva a megfelelő eseményekre, ezeket is kódból kell felírni:

button1.Click += button1_Click;

BAML használata kódból

Ez a tipikus eset, amit a már tárgyaltunk korábban. A Visual Studio a XAML file-t fordítja, beágyazza, és generálja a szükséges kódot annak futás közbeni betöltésére, és felhasználására.

Valószínű van mód az előzőekben leírt módon dinamikusan betölteni baml leírást is. Megkeresem... (hz)'

vissza a tartalomjegyzékre

Hernyák Zoltán
A lap eredeti címe: „http://wiki.ektf.hu/wiki/Wpf:page40
Nézetek
nincs sb_54.91.51.101 cikk