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

时间:2017-05-29 11:48:28

标签: xaml avaloniaui

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

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

1 个答案:

答案 0 :(得分:4)

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

  • Button:这会按类型选择控件,因此如果您编写选择器Button,它将匹配Avalonia.Controls.Button类。它不会匹配派生类型[1]
  • :is(Button):这与Class非常相似,但它也匹配派生类型
  • Button TextBlock:当两个选择器由空格分隔时,选择器将匹配后代,因此在这种情况下,选择器将匹配作为TextBlock的逻辑后代的任何Button
  • Button > TextBlock:当两个选择器被>分隔时,选择器将匹配子项,因此在这种情况下,选择器将匹配任何TextBlock,它是一个直接逻辑子项Button
  • Button#MyButton这会将ButtonName MyButton
  • 匹配
  • Button.MyClass这将匹配任何Button字符串MyClass作为其Classes
  • 中的条目
  • Button:disabled这会将Button:disabled pseudo-class
  • 匹配
  • Button[IsDefault=true]:这将匹配Button属性为IsDefault的所有true
  • Button /template/ ContentPresenter这与ContentPresenter [2]
  • 的控件模板中的Button相匹配

[1]:请注意,对象的类型实际上是通过查看其IStyleable.StyleKey属性来确定的,因此如果您确实希望将继承自Button的控件设置为{{1然后,您可以在类上实现Button以返回IStyleable.StyleKey

[2]:这类似于CSS中的(现已弃用的)typeof(Button)运算符; CSS shadow DOM与控制模板的概念非常相似。