样式选择器语法
本页面列出了XAML样式选择器的语法,以及执行相同选择的C#代码方法。
按控件类选择
<Style Selector="Button">
<Style Selector="local|Button">
C#
new Style(x => x.OfType<Button>());
new Style(x => x.OfType(typeof(Button)));
按控件类选择。
以上第一个示例选择Avalonia.Controls.Button
类。要在类型中包含XAML命名空间,请使用|
字符将命名空间和类型分隔。
注意
此选择器不匹配派生类型。若要匹配派生类型,请使用:is
选择器,参见下文。
信息
请注意,对象的类型实际上是通过查看其StyleKey
属性来确定的。默认情况下,它只返回当前实例的类型,但是,如果您希望从Button
继承的控件被视为Button
样式,则可以在您的类上重写StyleKeyOverride
属性以返回typeof(Button)
。
按名称选择
<Style Selector="#myButton">
<Style Selector="Button#myButton">
C#
new Style(x => x.Name("myButton"));
new Style(x => x.OfType<Button>().Name("myButton"));
按Name
属性选择控件,前面加上#
(井号)字符作为前缀。
按样式类选择
<Style Selector="Button.large">
<Style Selector="Button.large.red">
C#
new Style(x => x.OfType<Button>().Class("large"));
new Style(x => x.OfType<Button>().Class("large").Class("red"));
选择具有指定样式类或多个样式类的控件。多个类用点号分隔。如果选择器中指定了多个类,则控件必须同时拥有所有请求的类定义才能匹配。
按伪类选择
<Style Selector="Button:focus">
<Style Selector="Button.large:focus">
C#
new Style(x => x.OfType<Button>().Class(":focus"));
new Style(x => x.OfType<Button>().Class("large").Class(":focus"));
使用当前伪类选择控件。冒号字符在选择器中定义伪类名称。选择器中只能有一个伪类。与其他类一起使用时,伪类必须是列表中的最后一个。
信息
有关伪类的更多详细信息,请参见此处的参考。
包括派生类
<Style Selector=":is(Button)">
<Style Selector=":is(local|Button)">
C#
new Style(x => x.Is<Button>());
new Style(x => x.Is(typeof(Button)));
这与样式类选择器非常相似,但它还匹配派生类型。
信息
技术细节:在匹配过程中,Avalonia UI 通过检查控件的StyleKey
属性来确定其类型。
有趣的是,这允许您编写非常通用的基于类别的选择器。由于所有控件都派生自类Control
,因此只选择样式类margin2
的选择器可以编写如下:
<Style Selector=":is(Control).margin2">
<Style Selector=":is(local|Control.margin2)">
C#
new Style(x => x.Is<Control>().Class("margin2"));
new Style(x => x.Is(typeof(Control)).Class("margin2"));