Aracılığıyla paylaş


içindeki Örtük Stiller Xamarin.Forms

Örtük stil, her denetimin stile başvurmasını gerektirmeden aynı TargetType'ın tüm denetimleri tarafından kullanılan stildir.

XAML'de örtük stil oluşturma

Sayfa düzeyinde bir Style bildirmek için, sayfaya bir ResourceDictionary eklenmelidir ve ardından bir veya daha fazla Style bildirim öğesine ResourceDictionaryeklenebilir. bir Style özniteliği belirtilmeyerek örtük hale x:Key getirilir. Stil daha sonra tam olarak eşleşen TargetType görsel öğelere uygulanır, ancak değerden TargetType türetilen öğelere uygulanmaz.

Aşağıdaki kod örneği, bir sayfanın içinde XAML'de bildirilen ve sayfanın ResourceDictionaryEntry örneklerine uygulanan örtük stili gösterir:

<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>

, ResourceDictionary sayfanın Entry örneklerine uygulanan tek bir örtük stili tanımlar. , Style mavi metni sarı arka planda görüntülerken diğer görünüm seçeneklerini de ayarlamak için kullanılır. Style, bir x:Key öznitelik belirtilmeden sayfalara ResourceDictionary eklenir. Bu nedenle, Style tam olarak özelliğiyle Style eşleştiğinden EntryTargetType, tüm örneklere örtük olarak uygulanır. Ancak, Style alt sınıf olan örneğine CustomEntry uygulanmaz Entry. Bu, aşağıdaki ekran görüntülerinde gösterilen görünüme neden olur:

Örtük Stiller Örneği

Buna ek olarak, dördüncü Entry örtük stilin ve TextColor özelliklerini farklı Color değerlerle geçersiz kılarBackgroundColor.

Denetim düzeyinde örtük stil oluşturma

Aşağıdaki kod örneğinde gösterildiği gibi, sayfa düzeyinde örtük stiller oluşturmaya ek olarak, bunlar denetim düzeyinde de oluşturulabilir:

<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>

Bu örnekte örtükStyle, denetimin koleksiyonuna ResourcesStackLayout atanır. Örtük stil daha sonra denetime ve alt öğelerine uygulanabilir.

Bir uygulamanın ResourceDictionaryiçinde stil oluşturma hakkında bilgi için bkz . Genel Stiller.

C'de örtük stil oluşturma#

Styleörnekleri, aşağıdaki kod örneğinde gösterildiği gibi yeni ResourceDictionarybir oluşturularak ve sonra örnekleri ResourceDictionaryöğesine ekleyerek Style C# içindeki bir sayfanın Resources koleksiyonuna eklenebilir:

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" }
            }
        };
    }
}

Oluşturucu, sayfanın Entry örneklerine uygulanan tek bir örtük stil tanımlar. , Style mavi metni sarı arka planda görüntülerken diğer görünüm seçeneklerini de ayarlamak için kullanılır. Style, bir key dize belirtilmeden sayfalara ResourceDictionary eklenir. Bu nedenle, Style tam olarak özelliğiyle Style eşleştiğinden EntryTargetType, tüm örneklere örtük olarak uygulanır. Ancak, Style alt sınıf olan örneğine CustomEntry uygulanmaz Entry.

Türetilmiş türlere stil uygulama

özelliği, Style.ApplyToDerivedTypes özelliği tarafından başvuruda bulunılan temel türden türetilen denetimlere bir stilin TargetType uygulanmasını sağlar. Bu nedenle, bu özelliğin olarak true ayarlanması, türlerin özelliğinde TargetType belirtilen temel türden türetilmiş olması koşuluyla, birden çok türü hedeflemek için tek bir stili etkinleştirir.

Aşağıdaki örnekte örneklerin arka plan rengini Button kırmızıya ayarlayan örtük bir stil gösterilmektedir:

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

Bu stilin sayfa düzeyine ResourceDictionary yerleştirilmesi, hem sayfadaki tüm Button örneklere hem de 'den Buttontüretilen tüm denetimlere uygulanmasına neden olur. Ancak, özellik ayarlanmazsa ApplyToDerivedTypes stil yalnızca örneklere Button uygulanır.

Eşdeğer C# kodu:

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

Resources = new ResourceDictionary { buttonStyle };