Aracılığıyla paylaş


içindeki Açık Stiller Xamarin.Forms

Açık stil, denetimlere Stil özellikleri ayarlanarak seçmeli olarak uygulanan stildir.

XAML'de açı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. , Style bildirimine içinde açıklayıcı bir anahtar veren bir x:Key öznitelik vererek açık hale getirilirResourceDictionary. Daha sonra, özellikleri ayarlanarak Style belirli görsel öğelere açık stiller uygulanmalıdır.

Aşağıdaki kod örneği, bir sayfanın XAML'sinde bildirilen ve sayfanın ResourceDictionary örneklerine Label uygulanan açık stilleri gösterir:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Styles.ExplicitStylesPage" Title="Explicit" IconImageSource="xaml.png">
    <ContentPage.Resources>
        <ResourceDictionary>
            <Style x:Key="labelRedStyle" TargetType="Label">
                <Setter Property="HorizontalOptions"
                        Value="Center" />
                <Setter Property="VerticalOptions"
                        Value="CenterAndExpand" />
                <Setter Property="FontSize" Value="Large" />
                <Setter Property="TextColor" Value="Red" />
            </Style>
            <Style x:Key="labelGreenStyle" TargetType="Label">
                ...
                <Setter Property="TextColor" Value="Green" />
            </Style>
            <Style x:Key="labelBlueStyle" TargetType="Label">
                ...
                <Setter Property="TextColor" Value="Blue" />
            </Style>
        </ResourceDictionary>
    </ContentPage.Resources>
    <ContentPage.Content>
        <StackLayout Padding="0,20,0,0">
            <Label Text="These labels"
                   Style="{StaticResource labelRedStyle}" />
            <Label Text="are demonstrating"
                   Style="{StaticResource labelGreenStyle}" />
            <Label Text="explicit styles,"
                   Style="{StaticResource labelBlueStyle}" />
            <Label Text="and an explicit style override"
                   Style="{StaticResource labelBlueStyle}"
                   TextColor="Teal" />
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

, ResourceDictionary sayfanın Label örneklerine uygulanan üç açık stili tanımlar. Her Style biri, metni farklı bir renkte görüntülemek için kullanılırken, yazı tipi boyutunu ve yatay ve dikey düzen seçeneklerini de ayarlar. Her Style biri, işaretleme uzantısı kullanılarak özellikleri ayarlanarak Style farklı Label bir değere StaticResource uygulanır. Bu, aşağıdaki ekran görüntülerinde gösterilen görünüme neden olur:

Açık Stiller Örneği

Buna ek olarak, son Label Style uygulanan, ama aynı zamanda farklı Color bir değere özelliğini geçersiz kılarTextColor.

Denetim düzeyinde açık stil oluşturma

Aşağıdaki kod örneğinde gösterildiği gibi, sayfa düzeyinde açı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" x:Class="Styles.ExplicitStylesPage" Title="Explicit" IconImageSource="xaml.png">
    <ContentPage.Content>
        <StackLayout Padding="0,20,0,0">
            <StackLayout.Resources>
                <ResourceDictionary>
                    <Style x:Key="labelRedStyle" TargetType="Label">
                      ...
                    </Style>
                    ...
                </ResourceDictionary>
            </StackLayout.Resources>
            <Label Text="These labels" Style="{StaticResource labelRedStyle}" />
            ...
        </StackLayout>
    </ContentPage.Content>
</ContentPage>

Bu örnekte, açık Style örnekler denetimin koleksiyonuna Resources StackLayout atanır. Daha sonra stiller denetime ve alt öğelerine uygulanabilir.

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

C'de açı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 ExplicitStylesPageCS : ContentPage
{
    public ExplicitStylesPageCS ()
    {
        var labelRedStyle = new Style (typeof(Label)) {
            Setters = {
                ...
                new Setter { Property = Label.TextColorProperty, Value = Color.Red    }
            }
        };
        var labelGreenStyle = new Style (typeof(Label)) {
            Setters = {
                ...
                new Setter { Property = Label.TextColorProperty, Value = Color.Green }
            }
        };
        var labelBlueStyle = new Style (typeof(Label)) {
            Setters = {
                ...
                new Setter { Property = Label.TextColorProperty, Value = Color.Blue }
            }
        };

        Resources = new ResourceDictionary ();
        Resources.Add ("labelRedStyle", labelRedStyle);
        Resources.Add ("labelGreenStyle", labelGreenStyle);
        Resources.Add ("labelBlueStyle", labelBlueStyle);
        ...

        Content = new StackLayout {
            Children = {
                new Label { Text = "These labels",
                            Style = (Style)Resources ["labelRedStyle"] },
                new Label { Text = "are demonstrating",
                            Style = (Style)Resources ["labelGreenStyle"] },
                new Label { Text = "explicit styles,",
                            Style = (Style)Resources ["labelBlueStyle"] },
                new Label {    Text = "and an explicit style override",
                            Style = (Style)Resources ["labelBlueStyle"], TextColor = Color.Teal }
            }
        };
    }
}

Oluşturucu, sayfanın Label örneklerine uygulanan üç açık stili tanımlar. Her açık Style yöntemi kullanılarak Add öğesine eklenir ResourceDictionary ve örneğe başvurmak Style için bir key dize belirtilir. Her Style biri, özellikleri ayarlanarak Style farklı Label bir öğesine uygulanır.

Ancak, burada kullanmanın bir ResourceDictionary avantajı yoktur. Bunun yerine, Style örnekler gerekli görsel öğelerinin Style özelliklerine doğrudan atanabilir ve ResourceDictionary aşağıdaki kod örneğinde gösterildiği gibi kaldırılabilir:

public class ExplicitStylesPageCS : ContentPage
{
    public ExplicitStylesPageCS ()
    {
        var labelRedStyle = new Style (typeof(Label)) {
            ...
        };
        var labelGreenStyle = new Style (typeof(Label)) {
            ...
        };
        var labelBlueStyle = new Style (typeof(Label)) {
            ...
        };
        ...
        Content = new StackLayout {
            Children = {
                new Label { Text = "These labels", Style = labelRedStyle },
                new Label { Text = "are demonstrating", Style = labelGreenStyle },
                new Label { Text = "explicit styles,", Style = labelBlueStyle },
                new Label { Text = "and an explicit style override", Style = labelBlueStyle,
                            TextColor = Color.Teal }
            }
        };
    }
}

Oluşturucu, sayfanın Label örneklerine uygulanan üç açık stili tanımlar. Her Style biri, metni farklı bir renkte görüntülemek için kullanılırken, yazı tipi boyutunu ve yatay ve dikey düzen seçeneklerini de ayarlar. Her Style biri, özellikleri ayarlanarak Style farklı Label bir öğesine uygulanır. Buna ek olarak, son Label Style uygulanan, ama aynı zamanda farklı Color bir değere özelliğini geçersiz kılarTextColor.