Как работают селекторы стиля в Авалонии?

Селекторы очень похожи на 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 - очень похожая концепция для управления шаблонами.

Другие вопросы по тегам