Как работают селекторы стиля в Авалонии?
Селекторы очень похожи на CSS. Какие селекторы доступны в Авалонии? Что означает этот селектор, например:
<Style Selector="ListBoxItem:selected /template/ ContentPresenter">
<Setter Property="Background" Value="#ffffff" />
</Style>
1 ответ
Решение
Да, селекторы очень похожи на CSS. В настоящее время (при 0,5.0 альфа) доступны следующие селекторы. Я объясняю эти селекторы на примере, иначе трудно понять:
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
Псевдо-классButton[IsDefault=true]
: это будет соответствовать любомуButton
который имеетIsDefault
собственностьюtrue
Button /template/ ContentPresenter
это соответствуетContentPresenter
в шаблоне управленияButton
[2]
[1]: обратите внимание, что тип объекта на самом деле определяется, глядя на его IStyleable.StyleKey
свойство, так что если вы хотите, чтобы ваш контроль, который наследуется от Button
быть стилизованным под Button
, то вы можете реализовать IStyleable.StyleKey
на ваш класс, чтобы вернуться typeof(Button)
,
[2]: это похоже на (сейчас не рекомендуется) /deep/
оператор в CSS; CSS shadow DOM - очень похожая концепция для управления шаблонами.