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 ResourceDictionary
eklenebilir. 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 ResourceDictionary
Entry
ö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 Entry
TargetType
, 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:
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 Resources
StackLayout
atanır. Örtük stil daha sonra denetime ve alt öğelerine uygulanabilir.
Bir uygulamanın ResourceDictionary
iç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 ResourceDictionary
bir 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 Entry
TargetType
, 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 Button
tü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 };