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

Posted

技术标签:

【中文标题】样式选择器如何在 Avalonia 中工作?【英文标题】:How do style selectors work in Avalonia? 【发布时间】:2017-10-29 17:16:29 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

以上是关于样式选择器如何在 Avalonia 中工作?的主要内容,如果未能解决你的问题,请参考以下文章

Gtk.CssProvider() 基于 ID 的选择器如何在 Gtk3 中工作?

如何让 CSS 选择器在 Chrome 17 的开发者工具中工作?

样式化 React Native 选择器

为啥“#.id”在 CSS/jQuery 中是一个糟糕的选择器,但它在 HTML 锚中工作?

ActiveMQ 5.7.0选择器无法在C#中工作

有没有办法让 CSS :not() 选择器在 IE 和 Chrome 中工作?