Udostępnij za pośrednictwem


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, booli 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 ContentPageklasy . 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, Androidi 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 ContentPagegłównym elementu , lub <StackLayout.Children> tagu, który otacza elementy podrzędne StackLayoutelementu .

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 :

Potrójny zrzut ekranu przedstawiający udostępnianie odmian tekstu