Professional Documents
Culture Documents
Od podstaw
Autor: Pawe Maciejewski, Pawe Redmerski
ISBN: 978-83-246-1984-9
Tytu oryginau: COM+ Developer's Guide
Format: 158x235, stron: 208
Technologia Silverlight, opracowana przez Microsoft, jest propozycj dla tych, ktrzy
przymierzaj si do projektowania aplikacji internetowych lub zajmuj si tym ju
od jakiego czasu, a chcieliby poszerzy spektrum swoich umiejtnoci.
Do podstawowych zalet tej technologii nale prostota jej uywania oraz ogromna
elastyczno oprcz jzyka XAML, sucego do opisania interfejsu uytkownika,
twrca aplikacji moe posugiwa si dowolnym jzykiem programowania, dostpnym
dla platformy .NET. Gotowe programy przygotowane w Silverlight s kompatybilne
z wikszoci przegldarek, zainstalowanych na rnych platformach.
Ksika Silverlight. Od podstaw zawiera wszelkie informacje na temat najnowszej
wersji tej technologii. Znajdziesz tu opis tego rodowiska programistycznego, jego
funkcjonalnoci oraz narzdzi, ktre musisz zainstalowa, by mc sprawnie korzysta
z Silverlight. Poznasz take zasady tworzenia nowych projektw i ca mas
przykadw konkretnych rozwiza. Wszystko to uzupenione zostao licznymi zrzutami
ekranu, ilustrujcymi niemal kady krok oraz efekty dziaania podanego kodu.
Jeli chcesz nauczy si projektowa aplikacje internetowe w Silverlight, nie znajdziesz
lepszej ksiki!
Zasady dziaania technologii Silverlight
Silverlight a platforma .NET
Programowanie w jzyku XAML
Uywanie kontrolek interfejsu
Pozycjonowanie za pomoc kontenerw
Wykorzystywanie grafiki
Integracja z multimediami
Obsuga zdarze
Tworzenie animacji
Stosowanie stylw i szablonw
Spis treci
Rozdzia 1. Wprowadzenie .................................................................................. 7
Czym jest Silverlight ........................................................................................................ 7
Silverlight jest aplikacj RIA ..................................................................................... 7
Silverlight nie jest drugim Flashem ............................................................................ 7
Silverlight jest multimedialny .................................................................................... 8
Silverlight jest multiplatformowy ............................................................................... 8
Silverlight jest atwy ................................................................................................... 8
Do kogo kierowana jest ta ksika? .................................................................................. 9
Co Czytelnik bdzie potrafi po przeczytaniu ksiki? ..................................................... 9
Miejsce Silverlight w platformie .NET ........................................................................... 10
Narzdzia ........................................................................................................................ 10
Niezbdne narzdzia ................................................................................................ 10
Narzdzia dodatkowe ............................................................................................... 13
Specyfika projektw Silverlight ..................................................................................... 15
Tworzenie nowego projektu ..................................................................................... 15
Osadzanie obiektu Silverlight na stronie HTML ...................................................... 16
Zawarto solucji projektu Silverlight ...................................................................... 18
Kilka sw o strukturze skompilowanego projektu Silverlight ................................. 19
Jak korzysta z przykadw doczonych do ksiki? .................................................... 20
Silverlight. Od podstaw
Wasnoci domylne ....................................................................................................... 33
Domylna wasno znacznika ................................................................................. 33
Korzyci wynikajce ze stosowania wasnoci domylnej ....................................... 34
Modele zawartoci .................................................................................................... 35
Drzewo zalenoci .................................................................................................... 37
Zasada cigoci wasnoci domylnej ..................................................................... 38
Niejawna konwersja typw ............................................................................................. 39
Prosta konwersja typw ............................................................................................ 39
Konwersja zoona ................................................................................................... 40
Zdarzenia ........................................................................................................................ 42
Przypisanie zdarzenia ............................................................................................... 42
Obsuga zdarzenia .................................................................................................... 43
Rozszerzenia znacznikw ............................................................................................... 44
Skadnia rozszerze znacznikw .............................................................................. 44
Definiowanie i korzystanie z zasobw ..................................................................... 45
Wizanie danych ...................................................................................................... 47
Spis treci
5
Kontenery z poziomu kodu ........................................................................................... 108
Generowanie kontrolek .......................................................................................... 108
Generowanie kontenerw ....................................................................................... 109
Silverlight. Od podstaw
Rozdzia 4.
Kontenery
i pozycjonowanie
W poprzednim rozdziale zostay omwione szczegowo kontrolki dostpne w Silverlighcie.
Znajomo szerokiego wachlarza kontrolek, ktre oferuje technologia, jest niezmierne
wana, ale nie wystarczy do napisania aplikacji silverlightowej z poprawnym (przyjaznym dla uytkownika) interfejsem. Aby byo to moliwe, naley rozumie, jak dziaa
pozycjonowanie elementw wizualnych w technologii Silverlight, ktre jest tematem
tego rozdziau.
Pozycjonowanie kontrolek odbywa si przy pomocy tzw. kontenerw (ang. containers).
S one niewidocznymi obiektami, ktrych jedynym zadaniem jest pozycjonowanie kontrolek (lub innych kontenerw). Tylko elementy bdce wewntrz kontenera mog by
przeze pozycjonowane (patrz: rozdzia 2., Drzewo zalenoci). Pozycjonowanie elementw odbywa si zatem m.in. przez wkadanie ich do kontenerw. To jednak nie
wszystko. Kontener musi mie okrelone pewne wasnoci, ktre determinuj sposb,
w jaki pozycjonuje on elementy w jego wntrzu. W kocu pozycjonowany element moe
mie pewne doczone atrybuty, ktre wpywaj na jego pozycj. Podsumowujc, pozycj
obiektu okrelaj:
zaleno rodzic-dziecko (element pozycjonowany musi by wewntrz kontenera),
waciwoci kontenera (np. Orientation panelu stosu),
atrybuty doczone do elementu pozycjonowanego (np. Canvas.Left).
W polskiej literaturze mona si spotka z tumaczeniem sowa containers jako
pojemniki. W naszej ksice pozostaniemy przy okreleniu kontenery.
W pierwszej kolejnoci omwimy metody pozycjonowania elementw graficznych w Silverlighcie. Nastpnie omwimy zasady pozycjonowania absolutnego i relatywnego. Obydwie zasady pozycjonowania elementw sprowadzaj si w wikszoci przypadkw do
wybrania waciwego kontenera oraz nadania odpowiednich wartoci jego wasnociom
(a take wasnociom doczonym do jego dzieci). Z racji tego, e w Silverlighcie programista ma dostp do trzech rnych kontenerw:
92
Silverlight. Od podstaw
panelu stosu StackPanel,
siatki Grid,
ptna Canvas,
Pozycjonowanie relatywne
Marginesy
Kady obiekt klasy FrameworkElement posiada wasno Margin, czyli margines. Przypisujc margines obiektowi, programista okrela, jaki odstp dzieli go od innych elementw interfejsu.
Obiekty typu FrameworkElement posiadaj wasno Margin, ale nie maj wasnoci
Padding. Istnieje natomiast kontrolka (opisana w rozdziale 3.), ktra posiada zarwno
t, jak i inne wasnoci majce wpyw na wywietlanie elementw graficznych na
ekranie uytkownika. T kontrolk jest Border, ktra na licie czonkw klasy posiada
wasnoci: Margin, Padding, Background, BorderBrush, BorderThickness i inne, dziki
ktrym programista ma wiksz kontrol nad tym, w jaki sposb s wywietlane
elementy wizualne Silverlighta.
Addytywno
Na rysunku 4.1 mamy pokazany zrzut ekranu przykadowej aplikacji (rdo mona znale
w solucji /Rozdzial4.sln w pliku Margin.xaml).
Na rysunku 4.1 kwadrat posiada margines rwny 20 pikselom, natomiast koo ma margines rwny 50 pikselom. Addytywno marginesw przejawia si w tym, e s one do siebie dodawane podczas obliczania pozycji elementu graficznego na ekranie uytkownika.
Dlatego odstp pomidzy kwadratem i koem na rysunku 4.1 jest rwny w sumie
70 pikselom.
93
Rysunek 4.1.
Addywne dziaanie
marginesw
Ujemne marginesy
Czym, o czym do tej pory jeszcze nie wspominalimy, s ujemne marginesy. Ot
w Silverlighcie istnieje moliwo definiowania marginesw o ujemnych wartociach.
Tak jak dodatnie marginesy zwikszaj odstp pomidzy elementami interfejsu, tak marginesy ujemne go zmniejszaj. Jeli ujemny margines jest wikszy ni odlego dzielca
elementy, wtedy zaczynaj one na siebie zachodzi (jeden przykrywa drugi), tak jak
na rysunku 4.2.
Wyrwnanie elementw
Kady obiekt typu FrameworkElement posiada dwie wasnoci:
HorizontalAlignment,
VerticalAlignment,
94
Silverlight. Od podstaw
Rysunek 4.2.
Nachodzenie na siebie
elementw wynik
zastosowania
ujemnych marginesw
95
Rysunek 4.3.
Demonstracja
dziaania
podstawowych
wartoci wasnoci
pozycjonujcych
W kodzie programu z listingu 4.2 nie uylimy jednej z wartoci, ktra jest wsplna dla
obu wasnoci (zarwno HorizontalAlignment, jak i VerticalAlignment). Mowa tutaj
o wartoci Stretch.
Stretch jest wartoci, ktra mwi, aby obiekt zosta rozcignity w danym kierunku.
Innymi sowy, przypisanie obiektowi wasnoci HorizontalAlignment=Stretch sprawi,
e zabierze on cae dostpne miejsce w poziomie. Listing 4.3 pokazuje wykorzystanie
wartoci Stretch (rysunek 4.4 przedstawia zrzut ekranu aplikacji).
Listing 4.3. Wykorzystanie wasnoci Stretch
1 <Grid x:Name="LayoutRoot" Background="White">
2
<Rectangle HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
3
Stroke="LightBlue" StrokeThickness="3">
4
<Rectangle.Fill>
5
<LinearGradientBrush>
96
Silverlight. Od podstaw
Rysunek 4.4.
Dziaanie wartoci
Stretch
Prosz zwrci uwag na to, e w linijce 11. listingu 4.3 elipsa nie ma nadanej ani wasnoci HorizontalAlignment, ani VerticalAlignment, a pomimo tego zostanie ona rozcignita (jak wida na rysunku 4.4). Dzieje si tak dlatego, e warto Stretch jest domyln
wartoci zarwno dla HorizontalAlignment, jak i VerticalAlignment.
Wasnoci Width i Height obiektw typu FrameworkElement maj wyszy priorytet ni
warto Stretch wasnoci pozycjonujcych. W przypadku gdy okrelimy wielko
obiektu w pionie lub poziomie, warto Stretch nie ma znaczenia. Tak te jest
w przypadku przycisku z listingu 4.3 (linijka 19. i 20.). Ma on okrelon wysoko,
dlatego zajmuje cae miejsce w poziomie.
97
StackPanel
StackPanel, czyli inaczej panel stosu, to najprostszy z kontenerw dostpnych w Silverli-
W solucji /Rozdzial4.sln w pliku /StackPanelOrientation.xaml mona znale kod przykadowej aplikacji. Listing 4.4 pokazuje fragment kodu tego programu, w ktrym wida
dziaanie panelu stosu z wykorzystaniem wasnoci Orientation. Rysunek 4.5 przedstawia
zrzut ekranu aplikacji.
Listing 4.4. Uycie wasnoci Orientation panelu stosu
1 <StackPanel x:Name="LayoutRoot" Background="White">
2
<StackPanel Orientation="Horizontal">
3
<Rectangle Width="125" Height="125" Fill="#BBBBBB"
4
<Rectangle Width="125" Height="125" Fill="#EEEEEE"
5
<Rectangle Width="125" Height="125" Fill="#BBBBBB"
6
</StackPanel>
7
<StackPanel >
8
<Rectangle Width="125" Height="125" Fill="#BBBBBB"
9
<Rectangle Width="125" Height="125" Fill="#888888"
10
</StackPanel>
11 </StackPanel>
/>
/>
/>
/>
/>
Jak mona zobaczy na listingu 4.4, w przykadowej aplikacji mamy trzy panele stosu:
Panel nadrzdny o nazwie LayoutRoot przechowuje inne dwa panele stosu.
98
Silverlight. Od podstaw
Rysunek 4.5.
StackPanel uycie
wasnoci Orientation
W gruncie rzeczy panele stosu s bardzo prostym narzdziem. Prosz jednak zwrci
uwag na to, e w powyszym przykadzie uylimy trzech paneli stosu, zagniedajc
dwa z nich w jednym nadrzdnym. Jak na tak prosty zabieg zaowocowao to ciekawym
efektem. W dalszej czci ksiki Czytelnik bdzie mia okazj bardzo czsto spotyka
si z podobnym uyciem paneli stosu, ich sia bowiem tkwi w tym, e mona je atwo
(wrcz intuicyjnie) zagnieda oraz czy z innymi kontenerami.
Grid
Siatka Grid jest najwszechstronniejszym kontenerem dostpnym w technologii Silverlight.
Bez niej projektowanie interfejsw byoby o wiele bardziej uciliwe. Aby z niej skorzysta, programista najpierw definiuje siatk, okrelajc liczb wierszy i kolumn (a take ich
rozmiary). Efekt kocowy przypomina troch to, co mona zobaczy po otwarciu pustego
arkusza kalkulacyjnego. Pozycjonowanie za pomoc siatki polega po prostu na wkadaniu
elementw (kontrolek lub innych kontenerw) do jej komrek. W tym podrozdziale
omwimy zarwno etap projektowania siatki i wkadania do niej elementw, jak i dodatkowe moliwoci, takie jak choby scalanie ze sob komrek.
99
Dlatego wanie definicja zarwno kolumn, jak i wierszy odbywa si przy pomocy skadni
elementw waciwoci.
Jak ju zostao powiedziane, chodzi tutaj o dwie wasnoci (listing 4.5 przedstawia ich
uycie):
ColumnDefinitions definicje kolumn,
RowDefinitions definicje wierszy.
Listing 4.5. Wasnoci ColumnDefinitions i RowDefinitions
1 <Grid x:Name="LayoutRoot" ShowGridLines="True">
2
<Grid.ColumnDefinitions>
3
<ColumnDefinition Width="100" />
4
<ColumnDefinition Width="200" />
5
<ColumnDefinition Width="100" />
6 </Grid.ColumnDefinitions>
7
<Grid.RowDefinitions>
8
<RowDefinition Height="50" />
9
<RowDefinition Height="150" />
10
<RowDefinition Height="50" />
11
</Grid.RowDefinitions>
12 </Grid>
ktra mwi, e szeroko kolumny wynosi 100 pikseli. Jest to wielko statyczna, tzn.
podana jawnie w pikselach, w praktyce najczciej stosowana.
100
Silverlight. Od podstaw
Podczas pracy z siatkami bardzo szybko si okae, e statyczne okrelanie wielkoci jest
niewystarczajce i trzeba sign po wielkoci procentowe. Wielko wyraona procentowo
okrela, ile procent dostpnego dla elementu graficznego miejsca moe on zabra. W Silverlighcie 100% symbolizuje gwiazdka *. Aby kolumna zajmowaa cae dostpne jej miejsce,
naley napisa:
<ColumnDefinition Width=* />
To, czy programista napisze w kodzie programu 0.8*, czy 80*, jest tylko kwesti jego
wyboru.
W solucji /Rozdzial4.sln w pliku ColumnsAndRowsDefinitions.xaml mona znale przykadow aplikacj. Definiuje ona siatk z listingu 4.5 oraz umieszcza w niej przycisk. Zrzut
ekranu aplikacji przedstawia rysunek 4.6.
Jeli piszemy w programie pierwszy obiekt siatki, to czsto nie ma nadanych atrybutw
Grid.Row i Grid.Column. To dlatego, e w przypadku gdy nie doczymy atrybutw
Grid.Row i Grid.Column do obiektu, ktry znajduje si wewntrz siatki, wtedy zostanie
on umieszczony w pierwszej kolumnie i pierwszym wierszu (czyli tak, jakby mia doczone atrybuty Grid.Row=0 i Grid.Column=0).
101
Rysunek 4.6.
Pozycjonowanie
za pomoc siatki Grid
Scalanie komrek
Posugujc si siatk, w Silverlighcie istnieje moliwo scalania ze sob komrek. Dziki
temu moliwe jest osignicie efektw, takich jak na rysunku 4.7.
Rysunek 4.7.
Moliwoci, jakie daje
scalanie komrek
ktre przyjmuj jako warto liczb cakowit okrelajc ilo scalanych wierszy/kolumn.
Dla przykadu, kwadrat z powyszego rysunku scala dwie komrki w pionie i w poziomie.
102
Silverlight. Od podstaw
ShowGridLines
ShowGridLines to wasno, ktra znacznie uatwia prac programisty z siatkami. Przyjmuje ona warto logiczn:
true na siatce s pokazywane linie pomocnicze w miejscach, w ktrych
Width i Height
Width i Height to z pozoru trywialne waciwoci, ktre okrelaj rozmiary elementu
graficznego. W przypadku wszystkich kontenerw (nie tylko siatki) te dwie niepozorne
wasnoci maj jednak due znaczenie. Przyjrzyjmy si listingowi 4.6 z kodem aplikacji,
ktr mielimy okazj oglda na rysunku 4.8.
103
Pierwsz wan cech siatki z listingu 4.6 jest to, e ma ona okrelony rozmiar: 450 pikseli
szerokoci i 350 wysokoci. Drug ciekaw cech jest to, e zarwno definicja ostatniej
kolumny (linijka 7.), jak i definicja ostatniego wiersza (linijka 15.) nie ma okrelonego
rozmiaru.
Jest tak dlatego, e w przypadku siatek ich rozmiar okrelony waciwociami Width i Height
ma wiksze znaczenie ni definicje ich wierszy i kolumn. Oznacza to mniej wicej to, e
szeroko siatki nie jest rwna szerokoci jej kolumn, a wysoko siatki nie jest sum wysokoci wierszy. Z tego faktu wynika kilka konsekwencji, o ktrych trzeba pamita,
uywajc siatek.
Pierwsz z nich jest to, e definicje ostatnich kolumn/wierszy mog nie mie okrelonej
szerokoci/wysokoci. Niezalenie od tego, jaki nadamy rozmiar ostatniej kolumnie
i wierszowi, ich rozmiar zostanie tak dobrany, aby siatka miaa rozmiar zdefiniowany
przez Width i Height. Dlatego rozmiar ostatniej kolumny czy wiersza nie ma znaczenia.
Drug konsekwencj jest natomiast to, e jeli zdefiniujemy za may rozmiar siatki, to
kolumny i wiersze, ktre wykraczaj poza jej granice, nie bd widoczne.
Niezalenie od tego, co zrobimy z ostatni kolumn/wierszem, siatka i tak bdzie tak
szeroka i tak wysoka, jak to okrelilimy waciwociami Width i Height. W przypadku
gdy nie okrelimy wasnoci Width i Height, siatka najpewniej zabierze cae dostpne
dla niej miejsce i bdzie si zachowywaa dalej tak, jakby jej Width i Height byy
okrelone.
104
Silverlight. Od podstaw
Canvas
Jak ju zostao kilka razy wspomniane, w Silverlighcie programista ma do dyspozycji trzy
kontenery. Dwa z nich, ktre su do pozycjonowania relatywnego, zostay ju omwione.
Ostatni, kontener Canvas (ang. ptno), jest jedynym narzdziem w technologii Silverlight
sucym do pozycjonowania absolutnego.
Mona powiedzie, e pozycjonowanie absolutne pozwala programicie na okrelenie
wsprzdnych obiektu pozycjonowanego. Przy uyciu narzdzi pozycjonowania relatywnego (panelu stosu i siatki) nie ma takiej moliwoci. W tym podrozdziale skupimy
si na omwieniu sposobu korzystania z ptna.
Z racji tego, e w tym przypadku nie ma potrzeby definiowania ani kolumn, ani wierszy
(okrelamy tylko wsprzdne elementw pozycjonowanych), kontener Canvas nie posiada
tylu ciekawych waciwoci, co choby siatka Grid. Posugiwanie si ptnem sprowadza
si do doczania odpowiednich atrybutw do jego dzieci (w celu okrelenia m.in. wsprzdnych). Mowa tutaj o trzech atrybutach doczonych:
Canvas.Left,
Canvas.Right,
Canvas.ZIndex.
Canvas.Left i Canvas.Right
Te dwie wasnoci su do okrelenia odlegoci pozycjonowanego obiektu od lewego
grnego boku kontenera. Listing 4.7 pokazuje uycie tych dwch atrybutw doczonych.
W linijce 2. s doczone do kwadratu tak, aby jego pozycja na ptnie wynosia 130 pikseli
od gry i 230 pikseli od lewej strony.
Listing 4.7. Uycie wasnoci Canvas.Left i Canvas.Right do pozycjonowania kwadratu
1 <Canvas>
2
<Rectangle Canvas.Left="230" Canvas.Top="130"
3
Width="150" Height="150"
4
Stroke="LightBlue" StrokeThickness="3">
5
<Rectangle.Fill>
6
<LinearGradientBrush>
7
<GradientStop Offset="0" Color="DarkBlue" />
8
<GradientStop Offset="1" Color="Cyan" />
9
</LinearGradientBrush>
10
</Rectangle.Fill>
11
</Rectangle>
12 </Canvas>
105
106
Silverlight. Od podstaw
Wykonanie takiego programu, jaki zosta przedstawiony na rysunku 4.10, przy pomocy
np. siatki jest rwnie moliwe. W tym celu naleaoby zdefiniowa najpierw odpowiednie kolumny i wiersze, a nastpnie powkada w nie kwadraty. Lista czynnoci jest tutaj o
wiele dusza, dlatego ptno Canvas nadaje si do tego zadania o wiele lepiej.
Ptno jest narzdziem stosunkowo prostym, ale potnym. W przypadku gdybymy chcieli
dynamicznie zmienia pozycje kwadratw z rysunku 4.10 (np. w zalenoci od tego, gdzie
na ekranie znajduje si myszka), wystarczy tylko odpowiednio zmienia wasnoci atrybutw do nich doczonych.
Pomimo tych wszystkich zalet samo ptno najczciej nie przyda nam si do pisania
interfejsw siatka jest w takich sytuacjach niezastpiona.
Canvas.ZIndex
Podczas pozycjonowania absolutnego elementw czsto jest tak, e jedne zachodz na
drugie, zakrywajc je w mniejszym bd wikszym stopniu taka sytuacja pokazana jest
na rysunku 4.11.
Rysunek 4.11.
Nakadanie si
obiektw wizualnych
Czsto jest tak, e zachodzenie na siebie elementw nie jest wypadkiem przy pracy,
a efektem zamierzonym przez programist. Dlatego w Silverlighcie istnieje moliwo
okrelenia kolejnoci wywietlania elementw, tak aby programista mia nad nim pen
kontrol. Koncepcja nie jest moe i nowa, ale prosta i skuteczna. Polega na tym, e elementom graficznym znajdujcym si na kanwie mona przypisa liczb naturaln, ktra
determinuje to, jako ktry zostanie on wywietlony. Obiekty o numerach wyszych s
wywietlane ponad elementami o numerach niszych. Jeli zatem chcemy, aby kwadrat
z rysunku zawsze znajdowa si nad koem (niezalenie od jego miejsca w kodzie
programu), wtedy napiszemy kod programu z listingu 4.8.
107
108
Silverlight. Od podstaw
Generowanie kontrolek
Zanim przejdziemy do omawiania kontenerw tworzonych z poziomu kodu, pokaemy,
jaka jest oglna metoda generowania wikszoci kontrolek interfejsu, takich jak Button
czy TextBox.
Jak ju zostao napisane, w jzyku XAML piszemy znaczniki, ktrych wasnociom
moemy przypisa wartoci (za pomoc skadni atrybutowej bd elementw wasnoci).
Powiedzielimy te, e znaczniki z pliku .xaml s mapowane na obiekty jzyka CLR, tak
samo jak kod napisany w innym, dowolnym jzyku platformy .NET. Dlatego te pisanie
kontrolek z poziomu pliku code-behind sprowadza si do utworzenia obiektu odpowiedniej klasy (jeli ma to by przycisk, to tworzymy obiekt klasy Button) oraz nadania wasnociom nowo utworzonego obiektu odpowiednich wartoci. Listing 4.9 pokazuje,
jak tworzy si blok tekstu TextBlock z pliku code-behind.
Listing 4.9. Stworzenie bloku tekstu z poziomu kodu
1
2
3
4
5
6
Jak wida, przypisujemy wartoci wasnociom, ktre nazywaj si tak samo jak wasnoci
w XAML-u (i nie powinno by w tym nic dziwnego). Pozostaje jednak jeden problem.
Tak napisanej kontrolki nie zobaczymy po uruchomieniu aplikacji Silverlight. Aby kontrolka bya wywietlana na ekranie uytkownika, musi by osadzona na kontenerze.
W poniszym podrozdziale dowiemy si, jak to zrobi.
109
Generowanie kontenerw
Kolekcja Children
Wszystkie kontenery dziedzicz po jednej wsplnej klasie o nazwie Panel. Ta klasa
definiuje kolekcj Children. Jest to kolekcja typu UIElementCollection, co w praktyce
oznacza, e moemy do niej woy dowolny element wizualny Silverlighta. Moe by
to zarwno kontrolka interfejsu, ksztat, jak i inny kontener.
Wkadajc elementy wygenerowane w kodzie do kolekcji Children kontenera, sprawimy,
e bdzie on wywietlony i pozycjonowany przez ten kontener. Przy czym naley pamita, e kontener wcale nie musi by utworzony dynamicznie. Listing 4.10 pokazuje kod,
w ktrym osadzamy kontrolk z poprzedniego listingu na siatce LayoutRoot.
Listing 4.10. Woenie kontrolki do kontenera
1
2
3
4
5
6
7
8
9
Taki kod wywietli nam kontrolk bloku tekstu prosz spojrze na rysunek 4.13,
ktry pokazuje zrzut ekranu dziaajcej aplikacji. Peny kod programu mona znale
w solucji /Rozdzial4.sln w pliku TextBlockFromCodeBehind.cs.
Rysunek 4.13.
Pierwsza kontrolka
umieszczona
w kontenerze
z poziomu kodu
110
Silverlight. Od podstaw
111
Jak wida, mamy w niej trzy kolumny i tyle samo wierszy. Bdziemy teraz chcieli umieci w drugiej kolumnie i wierszu przycisk. Jeli mielibymy to zrobi w XAML-u, to
musielibymy wewntrz siatki umieci znacznik:
<Button Width=100 Height=20 Content=Przycisk Grid.Row =1 Grid.Column=1 />
Jeli jestemy natomiast po drugiej stronie, czyli po stronie pliku code-behind, to musimy
najpierw utworzy przycisk i doda go do listy czonkw siatki, tak jak to robilimy w poprzednich przykadach. Nastpnie musimy okreli kolumn i wiersz przycisku, co nie jest
prostym zadaniem z racji tego, e w XAML-u te wasnoci s atrybutami doczonymi.
Z pomoc przychodzi tutaj klasa Grid. Na jej licie czonkw mona znale cztery metody
statyczne:
void SetColumn(FrameworkElement element, int value) wkada element
do kolumny o numerze value,
void SetRow (FrameworkElement element, int value) wkada element
do wiersza o numerze value,
void SetColumnSpan (FrameworkElement element, int value) ustawia
scalanie kolumn o wartoci value dla obiektu element,
void SetRowSpan (FrameworkElement element, int value) ustawia
scalanie wierszy o wartoci value dla obiektu element.
Za pomoc tych metod moemy z poziomu kodu zrealizowa nasze cele. Listing 4.12
pokazuje kod, za pomoc ktrego umieszczamy przycisk w drugiej kolumnie i drugim
wierszu siatki, a take nadajemy mu scalanie dwch kolumn.
Listing 4.12. Umieszczenie przycisku w drugiej kolumnie i drugim wierszu siatki
1
2
3
4
5
6
7
8
112
Silverlight. Od podstaw
Rysunek 4.15.
Zrzut ekranu
aplikacji, ktra
osadza przycisk na
siatce z poziomu kodu
Napiszemy przykadowy program, w ktrym stworzymy dwa kwadraty, ustalimy ich pozycje na ekranie i kolejno wywietlania. Listing 4.13 pokazuje kod pliku .cs tej aplikacji.
Listing 4.13. Uycie metod pozycjonujcych klasy Canvas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Zdefiniowanie kwadratw
Rectangle r1 = new Rectangle();
Rectangle r2 = new Rectangle();
r1.Width = r2.Width = 100;
r1.Height = r2.Height = 100;
r1.Fill = new SolidColorBrush(Colors.Red);
r2.Fill = new SolidColorBrush(Colors.Green);
// Osadzenie kwadratw na kanwie
LayoutRoot.Children.Add(r1);
LayoutRoot.Children.Add(r2);
// Uycie metod klasy Canvas
Canvas.SetLeft(r1, 50);
Canvas.SetTop(r1, 50);
Canvas.SetZIndex(r1, 2);
Canvas.SetLeft(r2, 100);
Canvas.SetTop(r2, 100);
Canvas.SetZIndex(r2, 1);
113