Jak cię złapią, to znaczy, że oszukiwałeś. Jak nie, to znaczy, że posłużyłeś się odpowiednią taktyką.
Oznacza to mniej więcej to, że szerokość siatki nie jest równa szerokości jej kolumn, a wysokość siatki nie jest sumą wysokości wierszy. Z tego faktu wynika kilka konsekwencji, o których trzeba pamiętać, używając siatek.
Pierwszą z nich jest to, że definicje ostatnich kolumn/wierszy mogą nie mieć określonej szerokości/wysokości. Niezależnie od tego, jaki nadamy rozmiar ostatniej kolumnie i wierszowi, ich rozmiar zostanie tak dobrany, aby siatka miała rozmiar zdefiniowany przez Width i Height. Dlatego rozmiar ostatniej kolumny czy wiersza nie ma znaczenia. Drugą konsekwencją jest natomiast to, że jeśli zdefiniujemy za mały rozmiar siatki, to kolumny i wiersze, które wykraczają poza jej granice, nie będą widoczne. Niezależnie od tego, co zrobimy z ostatnią kolumną/wierszem, siatka i tak będzie tak szeroka i tak wysoka, jak to określiliśmy właściwościami Width i Height. W przypadku gdy nie określimy własności Width i Height, siatka najpewniej zabierze całe dostępne dla niej miejsce i będzie się zachowywała dalej tak, jakby jej Width i Height były określone. Takie zachowanie siatki może się wydawać początkowo nieintuicyjne. W praktyce jednak jest ono przydatne, programista bowiem, ustalając rozmiar siatki, ma gwarancję, że elementy przez nią pozycjonowane nie zmienią jej rozmiaru. Taka gwarancja ma dużą wartość, w przypadku gdy programista nie ma pewności, co się może znaleźć w kontenerze (np. gdy w siatce są dynamicznie wkładane informacje pochodzące z bazy danych). 104 Silverlight. Od podstaw Canvas Jak już zostało kilka razy wspomniane, w Silverlighcie programista ma do dyspozycji trzy kontenery. Dwa z nich, które służą do pozycjonowania relatywnego, zostały już omówione. Ostatni, kontener Canvas (ang. płótno), jest jedynym narzędziem w technologii Silverlight służącym do pozycjonowania absolutnego. Można powiedzieć, że pozycjonowanie absolutne pozwala programiście na określenie współrzędnych obiektu pozycjonowanego. Przy użyciu narzędzi pozycjonowania relatywnego (panelu stosu i siatki) nie ma takiej możliwości. W tym podrozdziale skupimy się na omówieniu sposobu korzystania z płótna. Z racji tego, że w tym przypadku nie ma potrzeby definiowania ani kolumn, ani wierszy (określamy tylko współrzędne elementów pozycjonowanych), kontener Canvas nie posiada tylu ciekawych właściwości, co choćby siatka Grid. Posługiwanie się płótnem sprowadza się do dołączania odpowiednich atrybutów do jego dzieci (w celu określenia m.in. współ- rzędnych). Mowa tutaj o trzech atrybutach dołączonych: Canvas.Left, Canvas.Right, Canvas.ZIndex. Przejdziemy teraz do pokazania, jak korzystać z tych atrybutów. Canvas.Left i Canvas.Right Te dwie własności służą do określenia odległości pozycjonowanego obiektu od lewego górnego boku kontenera. Listing 4.7 pokazuje użycie tych dwóch atrybutów dołączonych. W linijce 2. są dołączone do kwadratu tak, aby jego pozycja na płótnie wynosiła 130 pikseli od góry i 230 pikseli od lewej strony. Listing 4.7. Użycie własności Canvas.Left i Canvas.Right do pozycjonowania kwadratu 1 Rozdział 4. ♦ Kontenery i pozycjonowanie 105 W solucji /Rozdzial4.sln w pliku /CanvasLeftRight.xaml można znaleźć kod aplikacji, której fragment kodu został przedstawiony na listingu 4.7. Zrzut ekranu aplikacji (wraz z nanie-sionymi strzałkami pomocniczymi) przedstawia rysunek 4.9. Rysunek 4.9. Pozycjonowanie kwadratu za pomocą płótna Płótno Canvas, dzięki możliwości dokładnego określenia współrzędnych pozycjonowanego obiektu (za pomocą atrybutów dołączonych Canvas.Left i Canvas.Right), daje programi- ście największą swobodę pozycjonowania. Każdy obiekt wewnątrz płótna, niezależnie od tego, którym w kolejności jest dzieckiem, jest zawsze pozycjonowany względem lewego, górnego boku płótna. Dzięki temu można w mgnieniu oka napisać aplikację, która wyglą- da np. tak, jak ta przedstawiona na rysunku 4.10 (kod programu można znaleźć w solucji / Rozdzial4.sln w pliku CanvasLeftRight2.xaml). Rysunek 4.10. Możliwości pozycjonowania przy pomocy płótna Canvas 106 Silverlight. Od podstaw Wykonanie takiego programu, jaki został przedstawiony na rysunku 4.10, przy pomocy np. siatki jest również możliwe. W tym celu należałoby zdefiniować najpierw odpowied-nie kolumny i wiersze, a następnie powkładać w nie kwadraty. Lista czynności jest tutaj o wiele dłuższa, dlatego płótno Canvas nadaje się do tego zadania o wiele lepiej. Płótno jest narzędziem stosunkowo prostym, ale potężnym. W przypadku gdybyśmy chcieli dynamicznie zmieniać pozycje kwadratów z rysunku 4.10 (np. w zależności od tego, gdzie na ekranie znajduje się myszka), wystarczy tylko odpowiednio zmieniać własności atrybutów do nich dołączonych. Pomimo tych wszystkich zalet samo płótno najczęściej nie przyda nam się do pisania interfejsów — siatka jest w takich sytuacjach niezastąpiona. Canvas.ZIndex Podczas pozycjonowania absolutnego elementów często jest tak, że jedne zachodzą na drugie, zakrywając je w mniejszym bądź większym stopniu — taka sytuacja pokazana jest na rysunku 4.11. Rysunek 4.11. Nakładanie się obiektów wizualnych Często jest tak, że zachodzenie na siebie elementów nie jest wypadkiem przy pracy, a efektem zamierzonym przez programistę. Dlatego w Silverlighcie istnieje możliwość określenia kolejności wyświetlania elementów, tak aby programista miał nad nim pełną kontrolę. Koncepcja nie jest może i nowa, ale prosta i skuteczna. Polega na tym, że ele-mentom graficznym znajdującym się na kanwie można przypisać liczbę naturalną, która determinuje to, jako który zostanie on wyświetlony. Obiekty o numerach wyższych są wyświetlane „ponad” elementami o numerach niższych. Jeśli zatem chcemy, aby kwadrat z rysunku zawsze znajdował się nad kołem (niezależnie od jego miejsca w kodzie programu), wtedy napiszemy kod programu z listingu 4.8. Rozdział 4. ♦ Kontenery i pozycjonowanie 107
|
Wątki
|