样式选择器在Avalonia中如何工作?

x2b*_*ool 4 xaml avaloniaui

选择器看起来与CSS非常相似。阿瓦隆提供哪些选择器?例如,此选择器的含义是什么:

<Style Selector="ListBoxItem:selected /template/ ContentPresenter">
  <Setter Property="Background" Value="#ffffff" />
</Style>
Run Code Online (Sandbox Code Playgroud)

Gro*_*kys 6

是的,选择器与CSS非常相似。当前(alpha为0.5.0)可以使用以下选择器。我以示例的方式解释了这些选择器,否则很难理解:

  • Button:这Button将按类型选择控件,因此,如果编写选择器,则它将与Avalonia.Controls.Button类匹配。它将匹配派生类型[1]
  • :is(Button):这非常类似于,Class除了它也匹配派生类型
  • Button TextBlock:当两个选择器之间用空格隔开时,该选择器将匹配其后代,因此在这种情况下,该选择器将匹配TextBlock作为Button
  • Button > TextBlock:当两个选择器之间用a分隔时>,该选择器将匹配子级,因此在这种情况下,该选择器将匹配任何TextBlock直接作为的逻辑子级的子级Button
  • Button#MyButton这将匹配任何ButtonNameMyButton
  • Button.MyClass这将匹配任何Button与字符串MyClass作为其条目的条目Classes
  • Button:disabled这将匹配任何Button:disabled伪类
  • Button[IsDefault=true]:这将匹配Button具有以下IsDefault属性的任何内容true
  • Button /template/ ContentPresenter这与[2] ContentPresenter的控制模板中的匹配Button

[1]:请注意,对象的类型实际上是通过查看其IStyleable.StyleKey属性确定的,因此,如果您希望将继承自Button其的控件的样式设置为a Button,则可以IStyleable.StyleKey在类上实现return typeof(Button)

[2]:这类似于/deep/CSS中的(现在不推荐使用)运算符;CSS阴影DOM与控件模板非常相似。