Udostępnij za pośrednictwem


Niejawne style w Xamarin.Forms

Niejawny styl jest taki, który jest używany przez wszystkie kontrolki tego samego typu TargetType, bez konieczności odwołowania się do stylu przez każdą kontrolkę.

Tworzenie niejawnego stylu w języku XAML

Aby zadeklarować element Style na poziomie strony, należy dodać element do strony, ResourceDictionary a następnie w pliku można uwzględnić co najmniej jedną Style deklarację ResourceDictionary. Element a Style jest niejawny, nie określając atrybutux:Key. Styl zostanie następnie zastosowany do elementów wizualnych, które TargetType pasują dokładnie, ale nie do elementów, które pochodzą z TargetType wartości.

Poniższy przykład kodu przedstawia niejawny styl zadeklarowany w języku XAML w kodzie strony ResourceDictionaryi zastosowany do wystąpień strony Entry :

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:Styles;assembly=Styles" x:Class="Styles.ImplicitStylesPage" Title="Implicit" IconImageSource="xaml.png">
    <ContentPage.Resources>
        <ResourceDictionary>
            <Style TargetType="Entry">
                <Setter Property="HorizontalOptions" Value="Fill" />
                <Setter Property="VerticalOptions" Value="CenterAndExpand" />
                <Setter Property="BackgroundColor" Value="Yellow" />
                <Setter Property="FontAttributes" Value="Italic" />
                <Setter Property="TextColor" Value="Blue" />
            </Style>
        </ResourceDictionary>
    </ContentPage.Resources>
    <ContentPage.Content>
        <StackLayout Padding="0,20,0,0">
            <Entry Text="These entries" />
            <Entry Text="are demonstrating" />
            <Entry Text="implicit styles," />
            <Entry Text="and an implicit style override" BackgroundColor="Lime" TextColor="Red" />
            <local:CustomEntry Text="Subclassed Entry is not receiving the style" />
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

Element ResourceDictionary definiuje pojedynczy niejawny styl zastosowany do wystąpień strony Entry . Element Style służy do wyświetlania niebieskiego tekstu na żółtym tle, a jednocześnie ustawia inne opcje wyglądu. Element Style jest dodawany do strony ResourceDictionary bez określania atrybutu x:Key . W związku z tym właściwość Style jest stosowana do wszystkich Entry wystąpień niejawnie zgodnie z właściwością TargetType Style dokładnie. Jednak parametr Style nie jest stosowany do CustomEntry wystąpienia, które jest podklasą Entry. Spowoduje to wyświetlenie wyglądu pokazanego na poniższych zrzutach ekranu:

Przykład niejawnych stylów

Ponadto czwarty Entry zastępuje BackgroundColor właściwości i TextColor stylu niejawnego do różnych Color wartości.

Tworzenie niejawnego stylu na poziomie kontrolki

Oprócz tworzenia niejawnych stylów na poziomie strony można je również utworzyć na poziomie kontroli, jak pokazano w poniższym przykładzie kodu:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:Styles;assembly=Styles" x:Class="Styles.ImplicitStylesPage" Title="Implicit" IconImageSource="xaml.png">
    <ContentPage.Content>
        <StackLayout Padding="0,20,0,0">
            <StackLayout.Resources>
                <ResourceDictionary>
                    <Style TargetType="Entry">
                        <Setter Property="HorizontalOptions" Value="Fill" />
                        ...
                    </Style>
                </ResourceDictionary>
            </StackLayout.Resources>
            <Entry Text="These entries" />
            ...
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

W tym przykładzie niejawny Style jest przypisywany do Resources kolekcji kontrolkiStackLayout. Następnie można zastosować niejawny styl do kontrolki i jej elementów podrzędnych.

Aby uzyskać informacje na temat tworzenia stylów w aplikacji ResourceDictionary, zobacz Style globalne.

Tworzenie niejawnego stylu w języku C#

Style wystąpienia można dodać do kolekcji strony Resources w języku C#, tworząc nowy ResourceDictionaryelement , a następnie dodając Style wystąpienia do ResourceDictionaryobiektu , jak pokazano w poniższym przykładzie kodu:

public class ImplicitStylesPageCS : ContentPage
{
    public ImplicitStylesPageCS ()
    {
        var entryStyle = new Style (typeof(Entry)) {
            Setters = {
                ...
                new Setter { Property = Entry.TextColorProperty, Value = Color.Blue }
            }
        };

        ...
        Resources = new ResourceDictionary ();
        Resources.Add (entryStyle);

        Content = new StackLayout {
            Children = {
                new Entry { Text = "These entries" },
                new Entry { Text = "are demonstrating" },
                new Entry { Text = "implicit styles," },
                new Entry { Text = "and an implicit style override", BackgroundColor = Color.Lime, TextColor = Color.Red },
                new CustomEntry  { Text = "Subclassed Entry is not receiving the style" }
            }
        };
    }
}

Konstruktor definiuje pojedynczy niejawny styl zastosowany do wystąpień strony Entry . Element Style służy do wyświetlania niebieskiego tekstu na żółtym tle, a jednocześnie ustawia inne opcje wyglądu. Element Style jest dodawany do strony ResourceDictionary bez określania key ciągu. W związku z tym właściwość Style jest stosowana do wszystkich Entry wystąpień niejawnie zgodnie z właściwością TargetType Style dokładnie. Jednak parametr Style nie jest stosowany do CustomEntry wystąpienia, które jest podklasą Entry.

Stosowanie stylu do typów pochodnych

Właściwość Style.ApplyToDerivedTypes umożliwia zastosowanie stylu do kontrolek, które pochodzą z typu podstawowego, do którego odwołuje TargetType się właściwość . W związku z tym ustawienie tej właściwości w taki sposób, aby true umożliwiało korzystanie z wielu typów w jednym stylu, pod warunkiem, że typy pochodzą z typu podstawowego określonego TargetType we właściwości .

W poniższym przykładzie pokazano niejawny styl, który ustawia kolor Button tła wystąpień na czerwony:

<Style TargetType="Button"
       ApplyToDerivedTypes="True">
    <Setter Property="BackgroundColor"
            Value="Red" />
</Style>

Umieszczenie tego stylu na poziomie ResourceDictionary strony spowoduje zastosowanie go do wszystkich Button wystąpień na stronie, a także do wszystkich kontrolek, które pochodzą z elementu Button. Jeśli ApplyToDerivedTypes jednak właściwość nie została ustawiona, styl zostanie zastosowany tylko do Button wystąpień.

Równoważny kod języka C# to:

var buttonStyle = new Style(typeof(Button))
{
    ApplyToDerivedTypes = true,
    Setters =
    {
        new Setter
        {
            Property = VisualElement.BackgroundColorProperty,
            Value = Color.Red
        }
    }
};

Resources = new ResourceDictionary { buttonStyle };