欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第12章 样式(二)

程序员文章站 2022-03-02 22:26:25
...

代码中的样式

尽管样式大多是在XAML中定义和使用的,但您应该知道在代码中定义和使用它们时的样子。 这是仅代码的BasicStyleCode项目的页面类。 BasicStyleCodePage类的构造函数使用对象初始化语法来模拟定义Style对象并将其应用于三个按钮时的XAML语法:

public class BasicStyleCodePage : ContentPage
{
    public BasicStyleCodePage()
    {
        Resources = new ResourceDictionary
        {
            { "buttonStyle", new Style(typeof(Button))
                {
                    Setters = 
                    {
                        new Setter
                        {
                            Property = View.HorizontalOptionsProperty,
                            Value = LayoutOptions.Center
                        },
                        new Setter
                        {
                            Property = View.VerticalOptionsProperty,
                            Value = LayoutOptions.CenterAndExpand
                        },
                        new Setter
                        {
                            Property = Button.BorderWidthProperty,
                            Value = 3
                        },
                        new Setter
                        {
                            Property = Button.TextColorProperty,
                            Value = Color.Red
                        },
                        new Setter
                        {
                            Property = Button.FontSizeProperty,
                            Value = Device.GetNamedSize(NamedSize.Large, typeof(Button))
                        },
                        new Setter
                        {
                            Property = VisualElement.BackgroundColorProperty,
                            Value = Device.OnPlatform(Color.Default, 
                                                      Color.FromRgb(0x40, 0x40, 0x40), 
                                                      Color.Default)
                        },
                        new Setter
                        {
                            Property = Button.BorderColorProperty,
                            Value = Device.OnPlatform(Color.Default,
                                                      Color.White,
                                                      Color.Black)
                        }
                    }
                }
            }
        };
        Content = new StackLayout
        {
            Children = 
            {
                new Button
                {
                    Text = " Carpe diem ",
                    Style = (Style)Resources["buttonStyle"]
                },
                new Button
                {
                    Text = " Sapere aude ",
                    Style = (Style)Resources["buttonStyle"]
                },
                new Button
                {
                    Text = " Discere faciendo ",
                    Style = (Style)Resources["buttonStyle"]
                }
            }
        };
    }
} 

在代码中比在XAML中更明显的是Setter的Property属性是BindableProperty类型。
此示例中的前两个Setter对象使用名为View.HorizontalOptionsProperty和View.VerticalOptionsProperty的BindableProperties对象进行初始化。 您可以使用Button.HorizontalOptionsProperty和Button.VerticalOptionsProperty,因为Button从View继承这些属性。 或者,您可以将类名更改为从View派生的任何其他类。
像往常一样,在代码中使用ResourceDictionary似乎毫无意义。 您可以消除该选项,只需将Style对象直接指定给按钮的Style属性即可。 但是,即使在代码中,Style也是将所有属性设置捆绑到一个紧凑包中的便捷方式。