Podsumowanie rozdziału 8. Harmonia między kodem i językiem XAML
Uwaga
Ta książka została opublikowana wiosną 2016 roku i od tego czasu nie została zaktualizowana. Jest wiele w książce, która pozostaje cenna, ale niektóre materiały są nieaktualne, a niektóre tematy nie są już całkowicie poprawne ani kompletne.
W tym rozdziale dokładniej omówiono język XAML, a szczególnie sposób interakcji kodu i języka XAML.
Przekazywanie argumentów
W ogólnym przypadku wystąpienie klasy w języku XAML musi mieć publiczny konstruktor bez parametrów; wynikowy obiekt jest inicjowany za pomocą ustawień właściwości. Istnieją jednak dwa inne sposoby tworzenia wystąpień i inicjowania obiektów.
Chociaż są to techniki ogólnego przeznaczenia, są one najczęściej używane w połączeniu z modelami widoków MVVM.
Konstruktory z argumentami
W przykładzie ParameteredConstructorDemo pokazano, jak używać tagu x:Arguments
do określania argumentów konstruktora. Te argumenty muszą być rozdzielane tagami elementów wskazującymi typ argumentu. W przypadku podstawowych typów danych platformy .NET dostępne są następujące tagi:
x:Object
x:Boolean
x:Byte
x:Int16
x:Int32
x:Int64
x:Single
x:Double
x:Decimal
x:Char
x:String
x:TimeSpan
x:Array
x:DateTime
Czy mogę wywołać metody z języka XAML?
W przykładzie FactoryMethodDemo pokazano, jak za pomocą x:FactoryMethod
elementu określić metodę fabryki wywoływaną w celu utworzenia obiektu. Taka metoda fabryki musi być publiczna i statyczna i musi utworzyć obiekt typu, w którym jest zdefiniowany. (Na przykład Color.FromRgb
metoda kwalifikuje się, ponieważ jest publiczna i statyczna i zwraca wartość typu Color
). Argumenty metody fabryki są określane w tagach x:Arguments
.
Atrybut x:Name
Atrybut x:Name
umożliwia utworzenie wystąpienia obiektu w języku XAML jako nazwy. Reguły dla tych nazw są takie same jak w przypadku nazw zmiennych języka C#. Po powrocie wywołania InitializeComponent
w konstruktorze plik za pomocą kodu może odwoływać się do tych nazw, aby uzyskać dostęp do odpowiedniego elementu XAML. Nazwy są faktycznie konwertowane przez analizator XAML na pola prywatne w wygenerowanej klasie częściowej.
Przykład XamlClock demonstruje użycie polecenia x:Name
, aby umożliwić plikowi kodu przechowywanie dwóch Label
elementów zdefiniowanych w języku XAML przy użyciu bieżącej daty i godziny.
Tej samej nazwy nie można używać dla wielu elementów na tej samej stronie. Jest to szczególny problem, jeśli używasz OnPlatform
do tworzenia równoległych obiektów nazwanych dla każdej platformy. Przykład PlatformSpecificLabele pokazuje lepszy sposób na zrobienie czegoś takiego.
Niestandardowe widoki oparte na języku XAML
Istnieje kilka sposobów, aby uniknąć powtarzania znaczników w języku XAML. Jedną z typowych technik jest utworzenie nowej klasy opartej na języku XAML pochodzącej z klasy ContentView
. Ta technika jest pokazana w przykładzie ColorViewList . Klasa ColorView
pochodzi z ContentView
, aby wyświetlić określony kolor i jego nazwę, podczas gdy ColorViewListPage
klasa pochodzi z ContentPage
jak zwykle i jawnie tworzy 17 wystąpień ColorView
.
Uzyskiwanie ColorView
dostępu do klasy w języku XAML wymaga innej deklaracji przestrzeni nazw XML, często nazywanej local
klasami w tym samym zestawie.
Zdarzenia i programy obsługi
Zdarzenia można przypisać do programów obsługi zdarzeń w języku XAML, ale sama procedura obsługi zdarzeń musi być zaimplementowana w pliku za pomocą kodu. XamlKeypad pokazuje, jak utworzyć interfejs użytkownika klawiatury w języku XAML i jak zaimplementować Clicked
programy obsługi w pliku za pomocą kodu.
Naciśnięcie gestów
Każdy View
obiekt może uzyskać dane wejściowe dotyku i wygenerować zdarzenia na podstawie tych danych wejściowych. Klasa View
definiuje GestureRecognizers
właściwość kolekcji, która może zawierać co najmniej jedno wystąpienie klas, które pochodzą z GestureRecognizer
klasy .
Tapped
Generuje TapGestureRecognizer
zdarzenia. Program MonkeyTap pokazuje, jak dołączyć TapGestureRecognizer
obiekty do czterech BoxView
elementów w celu utworzenia gry imitacji:
Ale program MonkeyTap naprawdę potrzebuje dźwięku. (Zobacz następny rozdział).