- XAML jest 'zasobem tekstowym', nie jest przetwarzany tak jak WinForms Designer na kod a'la InitializeComponent. XAML jest kompilowany do BAML'a, czyli do swojej binarnej reprezentacji - ktora jest bardzo podobna do tekstowej, tyle ze sie szybciej ja potem interpretuje. BAML jest osadzany w assembliu jako zasob i uzywany podczas runtime'a. Innymi slowy, XAML nie tworzy kodu. XAML jest zapisany w binarce. XAML jest ladowany i interpretowany i wykonywany na biezaco w razie potrzeby.
z tego powodu, w dowolnym momencie czasu, mozesz podczas pracy aplikacji skonstruowac sobie stringa, podac go runtimeowi jako xaml do skompilowania, a potem wynik kompilacji "wykonac", wstrzelic na formatke w okreslone miejsce, wyslac przez siec jako string zeby klient to wykonal (i odkrylismy SilverLight, muhahaha), whatever
-
że co? chodzi Ci dowiazanie metody obiektu klasy Ygrek jako EventHandler'a eventu z obiektu klasy Zet? jesli tak, to wez sobie odswiez informacje o delegatach.. (minipakiecik {ref-na-obiekt, pointer-to-method} )
-
tak. patrz opis w pkt. 1
-
upierdliwosc notacji w wielu miejscach, powolnosc (miejscami), brak Dispose, cacheowanie wszystkich DependencyProperty w warstwie WPF, wiele wiele upierdliwosci przy wiazaniu danych, WPF ma problemy sprzetowe na roznych platformach - pusczasz okienko i chodzi, za 5 minut puszczasz okienko i masz BlueScreen'a.. a takze, problemy blizejniewiadomojakie - mialem przypadek ze aplikacja renderowala sie poprawnie na 10 maszynach a na jednej nie, wszystko bylo rozjechane mimo ze ustawienia systemowe (czcionki, ramki, duperele) byly standardowe i identyczne na wszystkich 11stu kompach. ale te dwa to bardzo rzadkie przypadki. a -- no i wymagania sprzetowe... :):):)
ah, i mega minus: brak wsparcia dla dziedziczenia. na danej sciezce dziedziczenia klas, tylko JEDNA (nad)klasa ma prawo miec przywiazanego do siebie XAML'a. inne musza sie obyc bez niego. nie ma zmiluj sie. wszysktie mozliwe ograniczenia jakie z teog wynikaja wychodza szybko. jesli chcesz "odziedziczyc" wizualia po innej klasie, musisz zrobic to kompozycja: jakis obiekt tej innej klasy musisz zagniezdzic w sobie i go renderowac jako siebie, mowiac w skrocie..
i minus temu potomny: zalozmy ze tak zrobisz i ten obiekt wewnetrzny, oryginalny chcesz dostosowac.. chodzenie po jego drzewie zawartosci jest koszmarne - dopoki go nie zrozumiesz. w WinForms, w ASP- bylo "Control.Controls" etc i chodziles sobie po tym. Tutaj jest VisualTree i LogicalTree. Tzn. ze kazdy komponent ma dwoch rodzicow - takiego od renderingu (kto-w-czym sie prezentuje) i od struktury (kto-kogo-zdefiniowal)
i kolejny duzy minus: tak jak w WinForms i ASP - brak wsparcia dla kontrolek generycznych..
-
wiele wiele upierdliwosci przy wiazaniu danych - tak!:) - dopoki sie nie przyzwyczaisz i nie zrozumiesz tego "od deski do deski" to tak to postrzegasz.. ale to de facto nie minus.. porownujac z ASP albo WinForms, kocham XAML'a za te jego upierdliwosci, bo daja w koncu sensowny, spojny i jednoznaczny silnik databindingu). inny plus - przy odrobinie wprawy, totalna separacja GUI od reszty programu bardzo latwa do uzyskania. miodzio. poza tym, wszystkie 'proste operacje graficzne' masz prosto dostarczone. obroty, skalowania, animacje, etc sa definiowalne totalnie poza kodem. jest to upierdliwe, bez narzedzia w stylu Microsoft Blend bardzo ciezkie do sensownego stworzenia - ale.. ostatecznie we Flashu tez nie piszesz grafiki z palca tylko uzywasz edytora.. prawda? co do VisualTree i LogicalTree, po zrozumieniu ich, tez zaczynaja wygladac sensowniej niz pomysly stare z .Controls -- ostatecznie, dzieki temu mozna .. przeszukiwac/definiowac cokolwiek renderujace sie gdziekolwiek, a nie tylko definiowac dzieci renderujace sie 'we mnie'..
-
dobre. dobre. dobre. pare lat temu, piszac w C++ sterte formatek, wkurwilem sie i napisalem cos bardzo podobnego -- parser xml'i opisujacych jak w runtimie generowac formularz, tak zeby definicja danych i definicja grafiki byly osobno, niezle sie zdziwilem jak sie okazalo ze w XAML'u jest sporo podobnych rozwiazan do tego co musialem wykombinowac smameu wtedy..
ulomnosci designera WinForms i ASP'a chyba dobrze znasz.. generowanie InitializeComponent na podstawie drzewa obiektow w pamieci designera jest morderczym pomyslem, jesli tak nie uwazasz, to znaczy ze designer nigdy jeszcze Ci sie nie .. pomylil. podobnie w ASP'ie z jego generowaniem kodu stron/kontrolek w tle.. acz -- ASP juz byl calkiem niezly jesli chodzi o 'szablony' - ITemplate - ktore pozwalaly podac kontorlce z zewnatrz opis jak ma wygladac jej zwartosc.. ale, proba rozszerzenia obu mechanizmow o cokolwiek przypomina zwykle walenie glowa o sciane. w XAML'u bedzie troche lepiej. sensowniejsze ostylowywanie i wiazanie danych jest na tyle spojnie zdefiniowane, ze da sie rozbudowac o nowe rzeczy, co juz zasluguje na uznanie, zwlaszcza ze przy niezlych mozliwosciach graficznych, bedziesz chcial dorabiac nowe rzeczy i mechaznimy.. AttachedProperties i RoutedEvents beda CI wygladaly dziwacznie, sa dziwaczne. np. zadne DependencyProperty nie moze miec... gettera robiacego cos wiecej niz retun X; - getter nigdy sie nie odpali z poziomu xaml'a. ale za to, to pozwala na AttachedProperties co jest wielkim dodatkiem (mozesz do kazdego obiektu 'dostrzelic' atrybuty, nawet jesli on nie ma takich wlasciwosci sam z siebie)..
IMHO, XAML to bardzo dobry sposob definiowania GUI. jest prostszy niz zmuszanie WinForms designer'a do zrobienia nam dobrze i pozagniezdzania obiektow tak jak MY chcemy a nie on sadzi ze-, jest bardziej przejrzysty przy 'skinowaniu' istniejacych kontrolek niz ASP'owe wygibasy nad ITemplate.. ale ma niedopomyslenia: brak dziedziczenia wizualii prowadzi do koszmarnych wygibasow w miejscach gdzie faktycznie chcesz je uzyskac, brak mozliwosci prostego poprawienia kawalka stylu kontrolki, prowadzacy do koniecnzosci przedefniowania calego stylu na calkiem nowy rozniacy sie jedna linijka drazni i wola o pomste do nieba. ale to sie da przezyc albo obejsc wygibasami i refleksja.. itedeee.. mam nadzieje ze widac z tego ze problemy sa, ale sa inne: bardziej "zaawansowane". proste, podstawowe rzeczy osiagasz w mig
jesli wkurzaja cie ograniczenia WinForms/ASP, zapomnij o nich, zapomnij wszystko i przejdz na XAML'a. uwierz na slowo, ze jest to cos totalnie nowego. zapomnij o wszystkim i nie zwracaj uwagi ze sa miedzy nim podobienstwa z WinForms/ASP, dopoki nie poznasz XAML/WPF dobrze -- bo sie na tych podobienstwach przejedziesz i zmarnujesz kupe czasu tylko po to, by sie na koncu dowiedziec w tutorialu dla newbie ze 'tu sie to robi inaczej' :). serio
a jak juz zaczniesz xamlowac, jesli lubisz uzywac gotowych kontrolek pochodzacych od innych osob/firm i je dostosowywac do swoich widzimisie, idz kupic sobie nowy kontener stalowych nerwow. nie uslyszysz bowiem ze 'no co ty, nie da sie, bo niby jak??', bo sie da i jest to wiadome z gory, ale przeklinac bedziesz kazde drobne niedopomyslenie autorow kontrolki, kazdy brak publicznej wlasciwosci Font czy Color ktora powina byc w tej podkontrolce, kazdy hardcodowany styl graficzny ktory ktos nie pomyslal ze ktos chcailby zmienic :] (WPF! XAML! z definicji chcemy zeby dalo sie zmieniac!).. i vice versa, oni Ciebie za to tez. WPF podnosi mozliwosci i wymagania rowniez :P