Podsumowanie rozdziału 7. Język XAML a kod
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.
Xamarin.Forms obsługuje język znaczników oparty na formacie XML o nazwie Extensible Application Markup Language lub XAML (wymawiany jako "zammel"). Język XAML stanowi alternatywę dla języka C# podczas definiowania układu interfejsu Xamarin.Forms użytkownika aplikacji oraz definiowania powiązań między elementami interfejsu użytkownika i podstawowymi danymi.
Właściwości i atrybuty
Xamarin.Forms klasy i struktury stają się elementami XML w języku XAML, a właściwości tych klas i struktur stają się atrybutami XML. Aby utworzyć wystąpienie w języku XAML, klasa musi zazwyczaj mieć publiczny konstruktor bez parametrów. Wszystkie właściwości ustawione w języku XAML muszą mieć publiczne set
metody dostępu.
W przypadku właściwości podstawowych typów danych (string
, double
, bool
i tak dalej) analizator XAML używa standardowych TryParse
metod do konwertowania ustawień atrybutów na te typy. Analizator XAML może również łatwo obsługiwać typy wyliczenia i może łączyć elementy członkowskie wyliczenia, jeśli typ wyliczenia jest oflagowany za pomocą atrybutu Flags
.
Aby pomóc analizatorowi XAML, bardziej złożone typy (lub właściwości tych typów) mogą zawierać klasę TypeConverterAttribute
, która identyfikuje klasę, która pochodzi, z TypeConverter
której obsługuje konwersję z wartości ciągów do tych typów. Na przykład konwertuje ColorTypeConverter
nazwy kolorów i ciągi, takie jak "#rrggbb", na Color
wartości.
Składnia właściwości-elementu
W języku XAML klasy i obiekty utworzone na ich podstawie są wyrażane jako elementy XML. Są one znane jako elementy obiektu. Większość właściwości tych obiektów jest wyrażona jako atrybuty XML. Są to atrybuty właściwości.
Czasami właściwość musi być ustawiona na obiekt, którego nie można wyrazić jako prostego ciągu. W takim przypadku język XAML obsługuje tag nazywany elementem właściwości, który składa się z nazwy klasy i nazwy właściwości rozdzielonej kropką. Następnie element obiektu może pojawić się w ramach pary tagów property-element.
Dodawanie strony XAML do projektu
Przenośna Xamarin.Forms biblioteka klas może zawierać stronę XAML po jej utworzeniu lub dodać stronę XAML do istniejącego projektu. W oknie dialogowym, aby dodać nowy element, wybierz element, który odwołuje się do strony XAML lub ContentPage
i XAML. (Nie . ContentView
)
Uwaga
Opcje programu Visual Studio uległy zmianie od czasu napisania tego rozdziału.
Tworzone są dwa pliki: plik XAML z rozszerzeniem nazwy pliku xaml i plik C# z rozszerzeniem .xaml.cs. Plik C# jest często nazywany kodem pliku XAML. Plik z kodem jest częściową definicją klasy, która pochodzi z klasy ContentPage
. W czasie kompilacji kod XAML jest analizowany, a inna definicja klasy częściowej jest generowana dla tej samej klasy. Ta wygenerowana klasa zawiera metodę o nazwie InitializeComponent
, która jest wywoływana z konstruktora pliku za pomocą kodu.
Podczas wykonywania, po zakończeniu InitializeComponent
wywołania, wszystkie elementy pliku XAML zostały utworzone i zainicjowane tak, jakby zostały utworzone w kodzie języka C#.
Elementem głównym w pliku XAML jest ContentPage
. Tag główny zawiera co najmniej dwie deklaracje przestrzeni nazw XML, jeden dla Xamarin.Forms elementów i drugi definiujący x
prefiks elementów i atrybutów wewnętrznych dla wszystkich implementacji XAML. Tag główny zawiera x:Class
również atrybut wskazujący przestrzeń nazw i nazwę klasy pochodzącej z ContentPage
klasy . Jest to zgodne z przestrzenią nazw i nazwą klasy w pliku za kodem.
Kombinacja kodu XAML i kodu jest pokazana przez przykład CodePlusXaml.
Kompilator XAML
Xamarin.Forms ma kompilator XAML, ale jego użycie jest opcjonalne w oparciu o użycie elementu XamlCompilationAttribute
. Jeśli kod XAML nie jest kompilowany, kod XAML jest analizowany w czasie kompilacji, a plik XAML jest osadzony w języku PCL, gdzie jest również analizowany w czasie wykonywania. Jeśli kod XAML jest kompilowany, proces kompilacji konwertuje kod XAML na postać binarną, a przetwarzanie środowiska uruchomieniowego jest bardziej wydajne.
Specyfika platformy w pliku XAML
W języku OnPlatform
XAML klasa może służyć do wybierania znaczników zależnych od platformy. Jest to klasa ogólna i musi zostać utworzone wystąpienie atrybutu x:TypeArguments
zgodnego z typem docelowym. Klasa jest podobna OnIdiom
, ale używana znacznie rzadziej.
Korzystanie z nich OnPlatform
zmieniło się od czasu opublikowania książki. Pierwotnie był używany w połączeniu z właściwościami o nazwach iOS
, Android
i WinPhone
. Jest ona teraz używana z obiektami podrzędnymi On
. Platform
Ustaw właściwość na ciąg zgodny z publicznymi const
polami Device
klasy. Value
Ustaw właściwość na wartość spójną z atrybutem x:TypeArguments
taguOnPlatform
.
OnPlatform
jest pokazana w przykładzie ScaryColorList , tak zwana, ponieważ zawiera bloki prawie identycznego kodu XAML. Istnienie tego repetytucyjnego znacznika sugeruje, że techniki powinny być dostępne, aby go zmniejszyć.
Atrybuty właściwości zawartości
Niektóre elementy właściwości występują dość często, na przykład <ContentPage.Content>
tag w elemecie ContentPage
głównym elementu , lub <StackLayout.Children>
tagu, który otacza elementy podrzędne StackLayout
elementu .
Każda klasa może identyfikować jedną właściwość z klasą ContentPropertyAttribute
w klasie . W przypadku tej właściwości tagi property-element nie są wymagane. ContentPage
definiuje jego właściwość zawartości jako Content
, i Layout<T>
(klasa, z której StackLayout
pochodzi) definiuje jej właściwość zawartości jako Children
. Te tagi elementów właściwości nie są wymagane.
Element właściwości to Label
Text
.
Sformatowany tekst
Przykład TextVariations zawiera kilka przykładów ustawiania Text
właściwości i FormattedText
.Label
W języku XAML Span
obiekty są wyświetlane jako elementy podrzędne FormattedString
obiektu.
Gdy ciąg wielowierszowy jest ustawiony na Text
właściwość, znaki końcowe wiersza są konwertowane na znaki spacji, ale znaki końca wiersza są zachowywane, gdy ciąg wielowierszowy jest wyświetlany jako zawartość tagów Label
lub Label.Text
: