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

How do style selectors work in Avalonia?

选择器看起来与 CSS 非常相似。 Avalonia 有哪些选择器?这个选择器是什么意思,例如:

<Style Selector="ListBoxItem:selected /template/ ContentPresenter">
  <Setter Property="Background" Value="#ffffff" />
</Style>

是的,选择器与 CSS 非常相似。当前(0.5.0 alpha)the following selectors are available。我正在通过示例解释这些选择器,否则很难理解:

  • Button:按类型选择一个控件,所以如果你写一个选择器Button那么它将匹配Avalonia.Controls.Buttonclass。它不会匹配派生类型[1]
  • :is(Button):这与 Class 非常相似,除了它还匹配派生类型
  • Button TextBlock:当两个选择器被space分隔时,选择器将匹配后代,所以在这种情况下选择器将匹配任何TextBlock是逻辑后代共 Button
  • Button > TextBlock:当两个选择器被>隔开时,那么选择器会匹配children,所以在这种情况下选择器会匹配任何TextBlock这是 Button
  • 的直接逻辑 child
  • Button#MyButton 这将匹配任何 ButtonMyButton
  • Name
  • Button.MyClass 这将匹配任何 Button 与字符串 MyClass 作为其 Classes
  • 中的条目
  • Button:disabled 这将匹配任何 Button:disabled pseudo-class
  • Button[IsDefault=true]:这将匹配任何 IsDefault 属性 为 true
  • Button
  • Button /template/ ContentPresenter 这匹配 Button [2]
  • 的控件模板中的 ContentPresenter

[1]:请注意 object 的类型实际上是通过查看它的 IStyleable.StyleKey 属性 来确定的,因此如果您确实想要继承自 [=10 的控件=] 样式设置为 Button,那么您可以在 class 上实现 IStyleable.StyleKey 到 return typeof(Button).

[2]:这类似于CSS中的(现已弃用)/deep/运算符; CSS shadow DOM 是一个与控件模板非常相似的概念。