样式选择器如何在 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 > TextBlock
:当两个选择器被>
隔开时,选择器将匹配孩子,所以在这种情况下,选择器将匹配任何TextBlock
,它是Button
的直接逻辑孩子
Button#MyButton
这将匹配任何 Button
与 Name
的 MyButton
Button.MyClass
这将匹配任何Button
与字符串MyClass
作为其Classes
中的条目
Button:disabled
这将匹配任何 Button
与 :disabled
pseudo-class
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 是一个与控制模板非常相似的概念。
【讨论】:
以上是关于样式选择器如何在 Avalonia 中工作?的主要内容,如果未能解决你的问题,请参考以下文章
Gtk.CssProvider() 基于 ID 的选择器如何在 Gtk3 中工作?
如何让 CSS 选择器在 Chrome 17 的开发者工具中工作?