Język znaczników XAML na pozór nie wydaje się popularną technologią, z drugiej strony jest filarem większości aplikacyjnych rozwiązań giganta z Redmon

Język znaczników XAML na pozór nie wydaje się popularną technologią, z drugiej strony jest filarem większości aplikacyjnych rozwiązań giganta z Redmond, które korzystają z warstwy UI. W praktyce poszczególne wdrożenia są do siebie bardzo zbliżone i nie ma większego problemu w nauce Xamarina, jeśli wcześniej poznaliśmy WPF. Pisanie XAML-a może być bardzo przyjemne, ale jak wszystko w życiu, i to można łatwo zepsuć, tworząc zagmatwany i nieoptymalny kod. Pułapek w tej technologii jest bardzo dużo, dlatego warto poznać kilka zasad czy porad, które pozwolą na tworzenie zgrabniejszego i szybszego kodu. Tekst jest pisany z perspektywy ogólnej — bez fiksowania się na konkretnym wdrożeniu języka XAML.    

Poprawne stosowanie wartości domyślnych

  Każda właściwość używana w XAML-u ma swoją wartość domyślną. Jeśli np. stosujemy układ Grid, każdy element wewnątrz ma domyślnie ustawione właściwości:   Grid.Column=„0” i Grid.Row=„0"   Dlatego nie musimy ich w tym przypadku zapisywać ponownie, gdy element jest umieszczony w pierwszym wierszu i (lub) pierwszej kolumnie. Podobnie jest przy innych właściwościach.   Oprócz zwiększenia czytelności zapisu to podejście ma jeszcze drugi skutek. Taki XAML będzie po prostu szybszy, ponieważ nie będziemy nadpisywać bindowanych wartości.    

Spłaszczenie układu

  Tworząc layouty w XAML-u, często ulegamy pokusie stworzenia rozbudowanych, wielokrotnie zagnieżdżonych układów. To, co na pozór wydaje się bardziej eleganckie, w praktyce może doprowadzić do znacznego spowolnienia naszej aplikacji, zwłaszcza jeśli taki układ jest zastosowany jako element listy.   Wiele przypadków można rozwiązać, stosując po prostu inny rodzaj układu; np. wielokrotnie zagnieżdżone StackPanele możemy zastąpić jednym układem typu Grid.   Przykładowy układ zbudowany na StackPanelach: [sourcecode language="xml"] <StackPanel> <StackPanel Orientation="Horizontal"> <TextBlock Text="a" /> <TextBlock Text="b" /> </StackPanel> <StackPanel Orientation="Horizontal"> <TextBlock Text="c" /> <TextBlock Text="d" /> </StackPanel> </StackPanel> [/sourcecode]   Wersja na Gridzie:   [sourcecode language="xml"] <Grid> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions> <TextBlock Text="a" /> <TextBlock Text="b" Grid.Column="1" /> <TextBlock Text="c" Grid.Row="1" /> <TextBlock Text="d" Grid.Row="1" Grid.Column="1" /> </Grid> [/sourcecode]    

Używaj StackPanela zamiast Grida

  Czasem możliwe jest zastąpienie Grida kontrolką typu StackPanel, w sytuacji gdy Grid jest stosowany tylko do tworzenia kolejnych wierszy lub kolumn. W takim przypadku nie tylko uzyskamy czytelniejszy zapis, ale również użyjemy kontrolki, która mniej obciąża zasoby.   Przykładowy układ zapisany w Gridzie:   [sourcecode language="xml"] <Grid> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <TextBlock Text="a" /> <TextBlock Text="b" /> <TextBlock Text="c" /> </Grid> [/sourcecode]   można zastąpić prostym StackPanelem, który domyślnie korzysta z orientacji wertykalnej:   [sourcecode language="xml"] <StackPanel> <TextBlock Text="a" /> <TextBlock Text="b" /> <TextBlock Text="c" /> </StackPanel> [/sourcecode]    

User Control vs templated control

  Niektóre implementacje XAML-a pozwalają na stosowanie kontrolek użytkownika napisanych w XAML-u oraz tzw. templated controls. Istnieje kilka istotnych różnic pomiędzy tymi wariantami, ale jedną z najważniejszych jest wydajność. W przypadku templated controls szablon kontrolki jest parsowany tylko raz — niezależnie od liczby instancji tej kontrolki.    

Nie zagnieżdżaj scrolla w scrollu

  Niektóre kontrolki, takie jak listy, mają wbudowany wewnętrznie scroll, który pozwala na przewijanie ich zawartości. W tym przypadku nie powinniśmy wrzucać takich kontrolek wewnątrz kontrolki scrolla, ponieważ zepsuje to wirtualizację wbudowaną w kontrolkę listy.      

Jerzy Piechowiak

Altcontroldelete.pl

 


Szukasz informacji? Kliknij poniżej: