全局样式
通过将样式添加到应用程序的资源字典,可以在全球范围内提供样式。这有助于避免在页面或控件之间重复样式。
在XAML中创建全局样式
默认情况下,从模板创建的所有Xamarin.Forms应用程序使用App类来实现Application
子类。要Style
在应用程序级别声明,在应用程序ResourceDictionary
使用XAML中,默认的App类必须被替换为XAML App类和关联的代码隐藏。有关详细信息,请参阅使用应用程序类。
以下代码示例显示了Style
在应用程序级别声明的代码示例:
<Application xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Styles.App">
<Application.Resources>
<ResourceDictionary>
<Style x:Key="buttonStyle" TargetType="Button">
<Setter Property="HorizontalOptions" Value="Center" />
<Setter Property="VerticalOptions" Value="CenterAndExpand" />
<Setter Property="BorderColor" Value="Lime" />
<Setter Property="BorderRadius" Value="5" />
<Setter Property="BorderWidth" Value="5" />
<Setter Property="WidthRequest" Value="200" />
<Setter Property="TextColor" Value="Teal" />
</Style>
</ResourceDictionary>
</Application.Resources>
</Application>
这ResourceDictionary
定义了一个单一的显式样式,buttonStyle
它将用于设置Button
实例的外观。然而,全局样式可以是显式的或隐式的。
以下代码示例显示了应用于buttonStyle
页面Button
实例的XAML页面:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Styles.ApplicationStylesPage" Title="Application" Icon="xaml.png">
<ContentPage.Content>
<StackLayout Padding="0,20,0,0">
<Button Text="These buttons" Style="{StaticResource buttonStyle}" />
<Button Text="are demonstrating" Style="{StaticResource buttonStyle}" />
<Button Text="application style overrides" Style="{StaticResource buttonStyle}" />
</StackLayout>
</ContentPage.Content>
</ContentPage>
这将导致以下屏幕截图中显示的外观:
有关在页面中创建样式的信息ResourceDictionary
,请参阅显式样式和隐式样式。
覆盖样式
视图层次结构中较低的样式优先于定义较高的样式。例如,将Style
设置Button.TextColor
为Red
应用程序级别的设置将被设置Button.TextColor
为的页面级别风格覆盖Green
。类似地,页面级风格将被控件级风格覆盖。另外,如果Button.TextColor
直接设置在一个控件属性上,这将优先于任何样式。此优先级在以下代码示例中进行了说明:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Styles.ApplicationStylesPage" Title="Application" Icon="xaml.png">
<ContentPage.Resources>
<ResourceDictionary>
<Style x:Key="buttonStyle" TargetType="Button">
...
<Setter Property="TextColor" Value="Red" />
</Style>
</ResourceDictionary>
</ContentPage.Resources>
<ContentPage.Content>
<StackLayout Padding="0,20,0,0">
<StackLayout.Resources>
<ResourceDictionary>
<Style x:Key="buttonStyle" TargetType="Button">
...
<Setter Property="TextColor" Value="Blue" />
</Style>
</ResourceDictionary>
</StackLayout.Resources>
<Button Text="These buttons" Style="{StaticResource buttonStyle}" />
<Button Text="are demonstrating" Style="{StaticResource buttonStyle}" />
<Button Text="application style overrides" Style="{StaticResource buttonStyle}" />
</StackLayout>
</ContentPage.Content>
</ContentPage>
buttonStyle
在应用程序级定义的原始文件被buttonStyle
页级别定义的实例覆盖。此外,页面级别的样式被控制级别覆盖buttonStyle
。因此,Button
实例将显示为蓝色文本,如以下屏幕截图所示:
在C#中创建全局风格
Style
实例可以Resources
通过创建一个新的C#添加到C#中的应用程序的集合中ResourceDictionary
,然后通过将Style
实例添加到ResourceDictionary
,如下面的代码示例所示:
public class App : Application
{
public App ()
{
var buttonStyle = new Style (typeof(Button)) {
Setters = {
...
new Setter { Property = Button.TextColorProperty, Value = Color.Teal }
}
};
Resources = new ResourceDictionary ();
Resources.Add ("buttonStyle", buttonStyle);
...
}
...
}
构造函数定义了一个应用于整个应用程序中的实例的显式样式Button
。显式 Style
实例被添加到ResourceDictionary
使用该Add
方法,指定一个key
字符串来引用该Style
实例。然后,Style
实例可以应用于应用程序中正确类型的任何控件。然而,全局样式可以是显式的或隐式的。
以下代码示例显示了应用于buttonStyle
页面Button
实例的C#页面:
public class ApplicationStylesPageCS : ContentPage
{
public ApplicationStylesPageCS ()
{
...
Content = new StackLayout {
Children = {
new Button { Text = "These buttons", Style = (Style)Application.Current.Resources ["buttonStyle"] },
new Button { Text = "are demonstrating", Style = (Style)Application.Current.Resources ["buttonStyle"] },
new Button { Text = "application styles", Style = (Style)Application.Current.Resources ["buttonStyle"]
}
}
};
}
}
将buttonStyle
被施加到Button
通过设置它们的实例Style
的属性,并控制的外观Button
实例。
概要
通过将样式添加到应用程序中,样式可以在全球范围内使用ResourceDictionary
。这有助于避免在页面或控件之间重复样式。