选择器看起来与CSS非常相似。阿瓦洛尼亚有哪些选择器?例如,这个选择器的含义是什么:
<Style Selector="ListBoxItem:selected /template/ ContentPresenter">
<Setter Property="Background" Value="#ffffff" />
</Style>
是的,选择器与CSS非常相似。目前(在 0.5.0 alpha 时)以下选择器可用。我通过示例解释这些选择器,否则很难理解:
Button
:这将按类型选择控件,因此如果您编写选择器Button
则它将匹配Avalonia.Controls.Button
类。它与派生类型 [1] 不匹配:is(Button)
:这与Class
非常相似,只是它也匹配派生类型Button TextBlock
:当两个选择器用空格分隔时,选择器将匹配后代,因此在这种情况下,选择器将匹配作为Button
逻辑后代的任何TextBlock
Button > TextBlock
:当两个选择器被一个>
分隔时,则选择器将匹配子项,因此在这种情况下,选择器将匹配任何直接逻辑TextBlock
Button
Button#MyButton
这将匹配任何Button
与MyButton
Name
Button.MyClass
,这会将任何Button
与字符串MyClass
匹配,作为其Classes
中的条目Button:disabled
这将匹配任何Button
与:disabled
伪类Button[IsDefault=true]
:这将匹配任何具有IsDefault
属性为true
的Button
Button /template/ ContentPresenter
这与Button
的控件模板中的ContentPresenter
匹配 [2]
[1]:请注意,对象的类型实际上是通过查看其IStyleable.StyleKey
属性来确定的,因此,如果您确实希望从Button
继承的控件被样式设置为Button
,那么您可以在类上实现IStyleable.StyleKey
以返回typeof(Button)
。
[2]:这类似于 CSS 中的/deep/
运算符(现已弃用);CSS shadow DOM 是一个与控件模板非常相似的概念。