XAML框架提供了几种策略来个性化和自定义应用程序的外观.样式使我们可以灵活地设置对象的某些属性,并在多个对象之间重复使用这些特定设置,以获得一致的外观.
在样式中,您只能设置对象的现有属性,如高度,宽度和字体大小.
只有控件的默认行为可以是指定.
可以将多个属性添加到单个样式中.
样式用于为一组控件提供统一的外观.隐式样式用于将外观应用于给定类型的所有控件并简化应用程序.
想象一下,我们有三个按钮,所有按钮都必须看起来相同和减去;相同的宽度和高度,相同的字体大小和相同的前景色.我们可以在按钮元素本身上设置所有这些属性,对于所有按钮仍然可以,如下图所示.
但在现实生活中的应用程序中,您通常需要看到完全相同的内容.当然,不仅按钮,您通常希望您的文本块,文本框和组合框等在您的应用程序中看起来相同.当然必须有更好的方法来实现这一目标和减去;它被称为样式.您可以将样式视为将一组属性值应用于多个元素的便捷方式,如下图所示.
让我们看看包含三个按钮的示例,这些按钮是在XAML中创建的,带有一些属性.
<Window x:Class = "XAMLStyle.MainWindow" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local = "clr-namespace:XAMLStyle" mc:Ignorable = "d" Title = "MainWindow" Height = "350" Width = "604"> <StackPanel> <Button Content = "Button1" Height = "30" Width = "80" Foreground = "Blue" FontSize = "12" Margin = "10"/> <Button Content = "Button2" Height = "30" Width = "80" Foreground = "Blue" FontSize = "12" Margin = "10"/> <Button Content = "Button3" Height = "30" Width = "80" Foreground = "Blue" FontSize = "12" Margin = "10"/> </StackPanel> </Window>
当您查看上面的代码时,您会看到所有按钮的高度,宽度,前景色,字体大小和边距属性保持不变.当编译并执行上面的代码时,它将显示以下输出 :
现在让我们来看看同一个例子,但这一次,我们将使用 style .
<Window x:Class = "XAMLStyle.MainWindow" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local = "clr-namespace:XAMLStyle" mc:Ignorable = "d" Title = "MainWindow" Height = "350" Width = "604"> <Window.Resources> <Style x:Key = "myButtonStyle" TargetType = "Button"> <Setter Property = "Height" Value = "30"/> <Setter Property = "Width" Value = "80"/> <Setter Property = "Foreground" Value = "Blue"/> <Setter Property = "FontSize" Value = "12"/> <Setter Property = "Margin" Value = "10"/> </Style> </Window.Resources> <StackPanel> <Button Content = "Button1" Style = "{StaticResource myButtonStyle}"/> <Button Content = "Button2" Style = "{StaticResource myButtonStyle}"/> <Button Content = "Button3" Style = "{StaticResource myButtonStyle}"/> </StackPanel> </Window>
样式在资源字典中定义,每种样式都有唯一的密钥标识符和目标类型.在< style>内,您可以看到为每个属性定义了多个setter标签,这些标签将包含在样式中.
在上面的示例中,每个按钮的所有常用属性现在以样式定义,然后通过StaticResource标记扩展设置样式属性,使用唯一键为每个按钮分配样式.
当编译和执行上述代码时,它将产生以下窗口,它是相同的输出.
这样做的好处是显而易见的.我们可以在其范围内的任何地方重用该样式,如果我们需要更改它,我们只需在样式定义中而不是在每个元素上更改一次.
样式的级别是瞬间定义限制了该样式的范围.因此范围,即您可以使用样式的位置,取决于您定义它的位置.样式可以在以下级别定义 :
Sr.否 | 级别&说明 |
---|---|
1 | 控制级别 在控制级别定义样式只能应用于该特定控件. |
2 | 布局级别 在任何布局级别定义样式只能通过该布局及其子元素访问. |
3 | 窗口级别 该窗口上的所有元素都可以访问窗口级别的样式. |
4 | 应用程序级别 在应用程序级别定义样式使其可在整个应用程序中访问. |