Wprowadzenie do Xamarin.Forms stylów
Style umożliwiają dostosowywanie wyglądu elementów wizualnych. Style są definiowane dla określonego typu i zawierają wartości właściwości dostępnych dla tego typu.
Xamarin.Forms aplikacje często zawierają wiele kontrolek, które mają identyczny wygląd. Na przykład aplikacja może mieć wiele Label
wystąpień, które mają te same opcje czcionek i opcje układu, jak pokazano w poniższym przykładzie kodu XAML:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Styles.NoStylesPage"
Title="No Styles"
IconImageSource="xaml.png">
<ContentPage.Content>
<StackLayout Padding="0,20,0,0">
<Label Text="These labels"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand"
FontSize="Large" />
<Label Text="are not"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand"
FontSize="Large" />
<Label Text="using styles"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand"
FontSize="Large" />
</StackLayout>
</ContentPage.Content>
</ContentPage>
Poniższy przykład kodu przedstawia równoważną stronę utworzoną w języku C#:
public class NoStylesPageCS : ContentPage
{
public NoStylesPageCS ()
{
Title = "No Styles";
IconImageSource = "csharp.png";
Padding = new Thickness (0, 20, 0, 0);
Content = new StackLayout {
Children = {
new Label {
Text = "These labels",
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.CenterAndExpand,
FontSize = Device.GetNamedSize (NamedSize.Large, typeof(Label))
},
new Label {
Text = "are not",
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.CenterAndExpand,
FontSize = Device.GetNamedSize (NamedSize.Large, typeof(Label))
},
new Label {
Text = "using styles",
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.CenterAndExpand,
FontSize = Device.GetNamedSize (NamedSize.Large, typeof(Label))
}
}
};
}
}
Każde Label
wystąpienie ma identyczne wartości właściwości do kontrolowania wyglądu tekstu wyświetlanego Label
przez element . Spowoduje to wyświetlenie wyglądu pokazanego na poniższych zrzutach ekranu:
Ustawianie wyglądu poszczególnych kontrolek może być powtarzające się i podatne na błędy. Zamiast tego można utworzyć styl definiujący wygląd, a następnie zastosowany do wymaganych kontrolek.
Tworzenie stylu
Klasa Style
grupuje kolekcję wartości właściwości w jeden obiekt, który następnie można zastosować do wielu wystąpień elementów wizualnych. Pomaga to zmniejszyć powtarzające się znaczniki i umożliwia łatwiejsze zmianę wyglądu aplikacji.
Mimo że style zostały zaprojektowane głównie dla aplikacji opartych na języku XAML, można je również utworzyć w języku C#:
Style
wystąpienia utworzone w języku XAML są zwykle definiowane w obiekcieResourceDictionary
przypisanym doResources
kolekcji kontrolki, strony lubResources
kolekcji aplikacji.Style
wystąpienia utworzone w języku C# są zwykle definiowane w klasie strony lub w klasie, do której można uzyskać dostęp globalnie.
Wybieranie miejsca definiowania Style
wpływu, w którym można go użyć:
Style
wystąpienia zdefiniowane na poziomie kontrolki można stosować tylko do kontrolki i do jej elementów podrzędnych.Style
wystąpienia zdefiniowane na poziomie strony można stosować tylko do strony i jej elementów podrzędnych.Style
wystąpienia zdefiniowane na poziomie aplikacji można stosować w całej aplikacji.
Każde Style
wystąpienie zawiera kolekcję co najmniej jednego Setter
obiektu, z których każda Setter
ma obiekt Property
i Value
. Jest Property
to nazwa właściwości możliwej do powiązania elementu, do którego jest stosowany styl, a Value
wartość jest stosowana do właściwości .
Każde Style
wystąpienie może być jawne lub niejawne:
- Jawne wystąpienie jest definiowane przez określenie
TargetType
wartości ix:Key
oraz przez ustawienie właściwości elementuStyle
docelowego nax:Key
odwołanie.Style
Aby uzyskać więcej informacji na temat jawnych stylów, zobacz Jawne style. - Wystąpienie niejawne
Style
jest definiowane przez określenie tylko .TargetType
WystąpienieStyle
zostanie następnie automatycznie zastosowane do wszystkich elementów tego typu. Należy pamiętać, że podklasy obiektuTargetType
nie sąStyle
automatycznie stosowane. Aby uzyskać więcej informacji na temat niejawnych stylów, zobacz Niejawne style.
Podczas tworzenia Style
obiektu właściwość jest zawsze wymagana TargetType
. Poniższy przykład kodu przedstawia jawny styl (zwróć uwagę na x:Key
) utworzony w języku XAML:
<Style x:Key="labelStyle" TargetType="Label">
<Setter Property="HorizontalOptions" Value="Center" />
<Setter Property="VerticalOptions" Value="CenterAndExpand" />
<Setter Property="FontSize" Value="Large" />
</Style>
Aby zastosować Style
obiekt , obiekt docelowy musi być obiektem VisualElement
zgodnym TargetType
z wartością Style
właściwości , jak pokazano w poniższym przykładzie kodu XAML:
<Label Text="Demonstrating an explicit style" Style="{StaticResource labelStyle}" />
Style niższe w hierarchii widoków mają pierwszeństwo przed zdefiniowanymi wyżej. Na przykład ustawienie wartości ustawianej Style
Label.TextColor
na Red
wartość na poziomie aplikacji zostanie zastąpione przez styl na poziomie strony ustawiony Label.TextColor
na Green
wartość . Podobnie styl poziomu strony zostanie zastąpiony stylem poziomu kontrolki. Ponadto jeśli Label.TextColor
właściwość kontrolki jest ustawiana bezpośrednio, ma to pierwszeństwo przed dowolnymi stylami.
Artykuły w tej sekcji przedstawiają i wyjaśniają sposób tworzenia i stosowania jawnych i niejawnych stylów, tworzenia stylów globalnych, dziedziczenia stylu, reagowania na zmiany stylu w czasie wykonywania oraz sposobu używania wbudowanych stylów zawartych w programie Xamarin.Forms.
Uwaga
Co to jest identyfikator StyleId?
Xamarin.Forms Przed wersją 2.2 StyleId
właściwość była używana do identyfikowania poszczególnych elementów w aplikacji do identyfikacji w testach interfejsu użytkownika oraz w aparatach motywów, takich jak Pixate. Xamarin.Forms Jednak 2.2 wprowadził AutomationId
właściwość, która zastępuje StyleId
właściwość .