M-am gandit sa mai tweekuiesc putin la elementul interfetei noaste. Ar fi dragut ca acel slider sa nu stea mereu in calea ci sa apara doar atunci cand avem nevoie de el, adica atunci cand trecem cu mousul peste el. La plecarea cu mousul sliderul trebuie sa devina aproape invizibil. Asta m-a dus cu gandul la crearea unei mici animatii Silverlight, legata de proprietatea "Opacity" a Sliderului. In starea normala, sliderul va avea opacitatea 15% si aceasta va creste progresiv pana la 100% cand sliderul este in starea MouseOver. Pentru aceasta, va trebui sa modificam putin si controlul de slider, sa il extindem :)

1. In Expression Blend, vom deriva<link> controlul slider adaugat pe buton. Pentru aceasta va trebui sa intram in modul de editare al butonului creat in "lectia" trecuta. (Click dreapta pe buton , Edit Control Parts -> Edit Template).

2. Faptul ca am "derivat" controlul Slider, ne-a desfasurat codul XAML pentru controlul Slider.

3. Acest pas, poate fi facut atat in Expression Blend cat si in Visual Studio. Eu fiind mai mult programator decat designer, prefer sa lucrez in Visual Studio, scriind direct cod XAML. (In plus de asta nici nu sunt asa obisnuit cu Expression Blend inca). Deci, deschidem Visual Studio, deschidem pagina de cod Page.XAML si cautam templateul Sliderului creat.
In primul rand, in desfasurarea templateului cautam tagul <vsm:VisualStateManager.VisualStateGroups>. Vom gasi acest tag ca si copil al tagului de tip Grid numit "Root" care este containerul principal al cotrolului. In acest tag vom adauga (daca nu exista deja) starile "Normal" si "MouseOver" astfel :
<vsm:VisualState x:Name="Normal"><Storyboard></Storyboard></vsm:VisualState>
<vsm:VisualState x:Name="MouseOver"><Storyboard></Storyboard></vsm:VisualState>
In interiorul elementului Storyboard vom adauga animatiile care dorim sa se execute la intrarea in starea specificata de parinte. Dupa cum mentionam la inceputul articolului, vrem ca in starea Normal sa avem o opacitate de 15% iar in starea MouseOver sa avem opacitatea 100%. Iata si codul pentru a realiza acest lucru :
<vsm:VisualState x:Name="Normal">
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="Root" Storyboard.TargetProperty="Opacity">
<SplineDoubleKeyFrame KeyTime="00:00:01" Value="0.5"/>
<SplineDoubleKeyFrame KeyTime="00:00:02" Value="0.15"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="MouseOver">
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetName="Root" Storyboard.TargetProperty="Opacity">
<SplineDoubleKeyFrame KeyTime="00:00:01" Value="0.5"/>
<SplineDoubleKeyFrame KeyTime="00:00:02" Value="1"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>


4. Se compileaza si se ruleaza aplicatia.

Aici s-a terminat micul meu experiment cu crearea unui element de interfata web mai special, poate fara prea multa aplicativitate practica dar cu ajutorul caruia am explorat cateva din featurele interesante aduse de Silverlight.

Nu pretind ca ce am facut pana aici este perfect, este posibil sa fi avut scapari insa avand in vedere ca si pentru mine este "a first" cred ca pot fi scuzat :).
Voi incerca sa hostez mica aplicatie undeva si voi reveni cu un link.

Alex.

Un beneficiu al managementului pe baza de interfata web este usurinta incorporarii in orice device cu suport pentru retea. Fie ca se numeste User Interface sau Browser Based Interface vorbim despre acelasi lucru: un protocol integrat in firmware-ul dispozitivului care ofera access prin pagina web pentru configurare, management si monitorizare.
Functionarea, in mare, ar fi ca echipamentul are un server web integrat, iar paginile HTML sunt solutia cea mai la indemana pentru interfatarea cu utilizatorul. Prin urmare, utilizatorul poate accesa dispozitivul dorit de la un PC, PDA sau telefon mobil cu suport pentru browser web.

Organizat la nivel inalt, acest tip de management permite configurarea tuturor feature-lor puse la dispozitie pe echipament, vizualizarea statisticilor si a logurilor, statusul tuturor componentelor din sistem.
Sa incercam sa facem o prezentare succinta cu privire la implementarea interfetei web ca mijloc de comunicare cu un dispozitiv. Informatiil referitoare la un echipament pot fi prezentate ca pagini statice, care contin informatii constante ca numele, locatia, adresa retea, banner, etc, sau pagini dinamice cu liste de porturi, statistici de trafic, grafice, contoare, etc. Pagina dinamica este generata la o cerere si se construieste pe baza unei colectii initiale de elemente care se updateaza la un interval de refresh stabilit.
Interactiunea userului cu dispozitivul se face prin intermediul unor formuri HTML. Pagina in care userul face modificari: introducere text, selectie intrare dintr-o lista, un check box sau un radio button este transmisa browserului. Astfel se genereaza un mesaj pentru serverul web de pe echipament, prin care se executa cererea pe dispozitiv.

Andreea

Urmatorul pas in micul nostru experiment este crearea efectiva a controlului.
 
    1. In Expression Blend, pe pagina pr
incipala a proiectului, adaugam un buton.
   
    2. Se deriveaza butonul asa cum am discutat intr-un arcticol anterior.
    
    3. Cu ajutorul designerului, se adauga un control de tip slider sub Content Presenterul butonului.
 
    4. Dupa salvarea proiectului, ne "mutam" in Visual Studio pentru a adauga putin cod. Deschidem pagina XAML unde am adaugat butonul (page.xaml). Se observa ca in momentul derivarii butonului, in pagina a aparut descrierea XAML a butonului. Vom observa ca la finalul descrierii a aparut si controlul nostru Slider pe care l-am adaugat. Vom adauga aici un eveniment la schimbarea valorii sliderului. De asemenea, putem "jongla" putin si cu valorile min/max/value avand in vedere ca ele for reprezenta valoarea in px a marimii fontului. In final, declaratia sliderului ar trebui sa arate cam asa : 
<Slider Margin="8,0,8,0" RenderTransformOrigin="0.5,0.5" Opacity="1" ValueChanged="Slider_ValueChanged" VerticalAlignment="Bottom" Height="32" Maximum="20"Minimum="5" Value="12"/>

    5. La adugarea evenimentului pt Slider, Visual Studio ne va autogenera functia in cod care "Slider_ValueChanged" pe care o vom folosi pentru modificarea fontului. Vom gasi functia in clasa de cod asociata paginii : "Page.xaml.cs".
 
    6. Ultimul pas in crearea micului control este adaugarea de cod pentr modificarea fontului butonului parinte al sliderului

private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)

{

    btnTest.FontSize = Math.Ceiling(e.NewValue);

    7. Salvam proiectul si rulam. Modificand sliderul se observa modificarea marimii fontulu butonului. Pretty cool.


In WinForms, atunci cand doream sa extindem functionalitatea unor componente existente, creeam un UserControl in care cream controlul dorit sau un Component in care derivam controlul pe care doream sa il extindem. De exemplu atunci cand extindem un buton, putem sa ii adaugam proprietati si functionalitati noi insa nu putem "umbla" prea mult la modul in care arata acest buton.

Silverlight vine cu o noua abordare a derivarii controalelor, acestea fiind numite acum Templates. Dupa cum spuneam intr-un post anterior, XAML este acum in spatele interfetelor. Controalele standard din Silverlight sunt de fapt o serie de declaratii XAML, grupate si accesibile ca un tot unitar care poate fi folosit "as is" sau.... Sau poate fi "derivat" sau cum i se spune in Expression Blend : crearea si editarea unui nou teplate be baza controlului. Pentru a face acest lucru se selecteaza un control de pe interfata creata, click dreapta si se alege din meniu optiunea "Edit control parts" si apoi "Edit a copy". In acest moment, avem access la codul XAML pentru tot controlul selectat.

Expression Blend prezinta intr-un mod foarte intuitiv componentele, in mod ierarhic. Putem analiza componentele unui buton : are la baza un Container de tip grid; In container avem o componenta Background care contine gradientul butonului si animatiile de Mouse Hoover, Mouse Press; Avem un "content presenter" care dupa cum ii spune numele este containerul pentru continutul butonului; si in final 2 elemente de tip border pentru starile de Disable si Focus.
De aici incolo variantele de customizare sunt practic nelimitate. Se pot modifica componentele care formeaza butonul, se pot altera cele prezente, se pot adauga efecte noi pentru trecerile intre starile butonului.

Din acest punct de vede consider ca Silverlight a trecut la urmatorul nivel in materie de derivarea si extinderea controalelor pentru interfete.

Alex.


In partea de azi, vom crea proiectul, vom vedea cum interactioneaza intre ele Visual Studio 2008 si Expression Blend si vom rula prima aplicatie web Silverlight.


1. Proiectul se creaza din Visual Studio 2008, in mod identic cu orice alt tip de proiect. Se are grija sa se aleaga proiect de tip Silverlight Application. O prima particularitate apare dupa primul pas, cand suntem anuntati ca in solutie se va adauga un proiect suplimentar configurat automat sa incarce si sa ruleze aplicatia Silverlight. In esenta este un proiect ASP.NET care inacrca obiectul Silverlight intr-o pagina goala. Avem de asemenea si posibilitatea hostarii aplicatiei si intr-o pagina statica. In acest sens, ne este oferit si un fisier html cu scripturile javascript necesare.





2. Se deschide proiectul in Expression Blend.

3. Se adauga un buton din interfata Expression Blend pe pagina "page1.xaml" . Salvam proiectul



4. Se trece in Visual Studio. Vom primi o notificare ca anumite fisiere (daca sunt deschise) au fost modificate in afara mediului (da, au fost modificate in Expression Blend). Dupa confirmare, proiectul este actualizat.

5. "Aplicatia" poate fi acum rulata. (nimic special pana aici :p)

 Inca din primul rand vreau sa evidentiez ca un "vs" intre cele doua aplicatii este de-a dreptul stupid. Nu se pune problema care din ele este mai bun pentru a reliza o aplicatie Silverlight sau WPF ( chiar daca ambele ar putea face asta). Am sa imi argumentez afirmatiile in continuare raspunzand la urmatoarea intrebare : De ce am nevoie de ambele medii de dezvoltare?
   
    In primul rand, Visual Studio este destul de bine cunoscut ca si interfata de majoritatea programatorilor. Este un mediu optimizat pentru scrierea de cod si de aceea este foarte comod de realizat partea de programare in Visual Studio. Din pacate, proiectarea vizuala a interfetei web nu este posibila decat prin intermediul limbajului XAML. Visual Studio ofera si o "randare" a interfetei pe baza fisierului XAML insa aceasta este read-only.
     
    Tocmai acesta este punctul in care exceleaza Expression Blend. Acest mediu este ideal pentru designul interfetelor in mod interactiv, si vizual. Ofera o interfata foarte prietenoasa, majoritatea elementelor putand fi setate "din mouse". Vom intra in mai multe detalii in tutorialul pe care il voi prezenta in urmatoarele zile.
 
    Microsoft a proiectat o legatura foarte puternica si in acelasi timp eficienta intre cele 2 aplicatii. Un proiect poate fi deschis concomitent in ambele medii modificarile facute intr-o aplicatie actualizandu-se automat in cealalata aplicatie. 

   Dupa cum am mentionat anterior, vrem sa creem un control web, cu ajutorul Silverlight, un buton caruia sa ii modificam dimensiunea fontului cu ajutorul unui slider incorporat in buton.
   
   Voi enumera in continuare uneltele pe care le vom folosi in dezvoltarea componentei web propuse:
  •  Silverlight 2.0           - runtime Silverlight
  •  Visual Studio 2008  - mediu de dezvoltare
  •  Expression Blend 2  - mediu vizual de design
    Sa incepem...
 
Alex 

Un feature destul de cool care a aparut odata cu Silverlight si WPF, si care ne poate ajuta teribil pentru proiectarea unei interfete vizuale (fie ea interfata web sau interfata desktop) care "sa ia ochiu'" este acela ca majoritatea proprietatilor controalelor vizuale sunt de tip Object.
Ok, poate nu pare mult insa daca in trecut pe un buton puneam caption care era un simplu text, acum pot sa pun acolo cam orice, inclusiv un text cu un slider control sub el. Intrebare e... oare de ce as vrea asta ? Ideea mi-a venit incercand sa imi dau seama ce as putea vrea sa pun pe un buton, altceva decat un text sau o poza (care le puteam pune si pana acum) ca sa imbunatatesc interfata care o ofer utilizatorului. In final mi-a venit o idee, poate nu buna de aplicat in practica insa buna pentru a exemplifica ce incerc sa zic aici : pot sa folosesc un slider, pus "in" buton pentru a modifica "real-time" dimensiunea fontului textului butonului.

Ca sa si punem in aplicare "ideea" m-am gandit sa creez acest control inedit si sa postez pe masura ce avansez.

Si totusi ca sa termin ideea initiala hai sa va dau un exemplu in care feature-ul de care vorbeam chiar isi arata puterea : in orice interfata a oricarui site mai complex, vei avea de a face cu macar un DropDown. Elementele din DropDown de pana acum : vector de stringuri. Ei bine, de acum in locul lor poti pune cam orice: poti sa ai un element cu buton, un element cu checkbox, cu iconite in fata, cu iconite la sfarsit. Poti incadra un item intr-un "Rounded rectangle" poti sa pui gradiente ( diferite ) pe fiecare element si exemplele pot continua.

Din punctul meu de vedere, de acum e mult mai usor sa faci o interfata web traznet.

Alex.