Udostępnij za pośrednictwem


Podsumowanie rozdziału 12. Style

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 Xamarin.Formssystemie style umożliwiają wielu widokom udostępnianie kolekcji ustawień właściwości. Zmniejsza to adiustację i umożliwia utrzymywanie spójnych motywów wizualnych.

Style są prawie zawsze definiowane i używane w adiustacji. Obiekt typu Style jest tworzone w słowniku zasobów, a następnie ustawiany na Style właściwość elementu wizualizacji przy użyciu StaticResource rozszerzenia lub DynamicResource znaczników.

Styl podstawowy

Obiekt Style wymaga ustawienia TargetType typu obiektu wizualizacji, do którego ma on zastosowanie. Gdy wystąpienie elementu Style jest tworzone w słowniku zasobów (co jest wspólne), wymaga również atrybutu x:Key .

Obiekt Style ma właściwość zawartości typu Setters, która jest kolekcją Setter obiektów. Każdy Setter element kojarzy element Property z elementem Value.

W języku XAML Property ustawienie jest nazwą właściwości CLR (takiej jak Text właściwość Buttonklasy ), ale stylizowany właściwość musi być wspierana przez właściwość powiązaną. Ponadto właściwość musi być zdefiniowana w klasie wskazanej TargetType przez ustawienie lub dziedziczona przez tą klasę.

Ustawienie można określić Value przy użyciu elementu <Setter.Value>właściwości . Dzięki temu można ustawić Value obiekt, który nie może być wyrażony w ciągu tekstowym lub OnPlatform do obiektu albo do obiektu utworzonego przy użyciu metody x:Arguments lub x:FactoryMethod. Właściwość Value można również ustawić za pomocą StaticResource wyrażenia na inny element w słowniku.

Program BasicStyle demonstruje podstawową składnię i pokazuje, jak odwoływać się Style do elementu z StaticResource rozszerzeniem znaczników:

Potrójny zrzut ekranu przedstawiający styl podstawowy

Obiekt Style i dowolny obiekt utworzony w Style obiekcie jako Value ustawienie są współużytkowane przez wszystkie widoki odwołujące się do tego Styleobiektu . Element Style nie może zawierać żadnych elementów, których nie można udostępniać, takich jak pochodna View .

Nie można ustawić programów obsługi zdarzeń w obiekcie Style. Nie GestureRecognizers można ustawić właściwości w obiekcie , Style ponieważ nie jest ona wspierana przez właściwość, którą można powiązać.

Style w kodzie

Chociaż nie jest to powszechne, można utworzyć wystąpienie i zainicjować Style obiekty w kodzie. Jest to pokazane przez przykład BasicStyleCode.

Dziedziczenie stylu

StyleBasedOn ma właściwość, którą można ustawić na rozszerzenie znaczników odwołujące się do StaticResource innego stylu. Dzięki temu style mogą dziedziczyć z poprzednich stylów i dodawać lub zastępować ustawienia właściwości. W przykładzie StyleInheritance pokazano to.

Jeśli Style2 element jest oparty na metodzie Style1, element TargetType Style2 musi być taki sam jak Style1 lub pochodzi z Style1. Słownik zasobów, w którym Style1 jest przechowywany, musi być tym samym słownikiem zasobów co Style2 lub słownik zasobów wyższy w drzewie wizualizacji.

Style niejawne

Jeśli obiekt Style w słowniku zasobów nie ma x:Key ustawienia atrybutu, jest automatycznie przypisywany klucz słownika, a Style obiekt staje się stylem niejawnym. Widok bez Style ustawienia i którego typ pasuje TargetType dokładnie do tego stylu, jak pokazano w przykładzie ImplicitStyle .

Niejawny styl może pochodzić z Style elementu z ustawieniem x:Key , ale nie z drugiej strony. Nie można jawnie odwołać się do niejawnego stylu.

Można zaimplementować trzy typy hierarchii za pomocą stylów i BasedOn:

  • Od stylów zdefiniowanych na Application i Page w dół do stylów zdefiniowanych w układach niższych w drzewie wizualizacji.
  • Od stylów zdefiniowanych dla klas bazowych, takich jak VisualElement i View , do stylów zdefiniowanych dla określonych klas.
  • Od stylów z jawnymi kluczami słownika do niejawnych stylów.

Te hierarchie przedstawiono w przykładzie StyleHierarchy .

Style dynamiczne

Styl w słowniku zasobów można odwoływać się DynamicResource zamiast StaticResource. To sprawia, że styl jest stylem dynamicznym. Jeśli ten styl zostanie zastąpiony w słowniku zasobów przez inny styl przy użyciu tego samego klucza, widoki odwołujące się do tego stylu zostaną DynamicResource automatycznie zmienione. Ponadto brak wpisu słownika z określonym kluczem spowoduje StaticResource wystąpienie wyjątku, ale nie DynamicResource.

Ta technika umożliwia dynamiczne zmienianie stylu lub motywów, jak pokazano w przykładzie DynamicStyles .

Nie można jednak ustawić BasedOn właściwości na DynamicResource rozszerzenie makijażu, ponieważ BasedOn nie jest wspierana przez właściwość, którą można powiązać. Aby dynamicznie utworzyć styl, nie należy ustawiać BasedOnwartości . Zamiast tego ustaw BaseResourceKey właściwość na klucz słownika stylu, z którego chcesz pochodzić. Przykład DynamicStylesInheritance pokazuje tę technikę.

Style urządzeń

Klasa Device.Styles zagnieżdżona definiuje dwanaście statycznych pól tylko do odczytu dla sześciu stylów, TargetType Label których można użyć do typowych typów użycia tekstu.

Sześć z tych pól jest typu Style , które można ustawić bezpośrednio na Style właściwość w kodzie:

Pozostałe sześć pól jest typu string i może służyć jako klucze słownika dla stylów dynamicznych:

Te style są ilustrowane przez przykład DeviceStylesList.