Изменение цвета кнопки при нажатии на неё в Avalonia

Как сделать так, чтобы при нажатии на кнопку в Avalonia UI её цвет изменялся? В интернете когда ничего найти по этому поводу не смог, либо там было что-то невнятное, либо эти статьи уже не найти.


Ответы (1 шт):

Автор решения: Embedder

Вам надо модифицировать стиль для элемента управления Button. Например так

<Grid RowDefinitions="Auto,*">
    <Grid.Styles>
        <Style Selector="Button:pressed /template/ ContentPresenter#PART_ContentPresenter">
            <Setter Property="Background" Value="Red" />
            <Setter Property="BorderBrush" Value="Green" />
            <Setter Property="Foreground" Value="White" />
        </Style>
    </Grid.Styles>
    
    <Button Grid.Row="0"
            Content="Нажми меня"
            HorizontalAlignment="Center" />
    . . .
</Grid>

Значение селектора (Selector) содержит строку, которая описывает для какого элемента управления мы будем применять стиль.

Если рассмотреть выше приведённый пример, то стиль будет применятся для ContentPresenter c именем PART_ContentPresenter, который в свою очередь являются частью шаблона (/template/), реализующего Button. Ну и вишенка на торте - псевдокласс (:pressed), который указывает на то, что стиль будет применяться лишь, тогда когда кнопка нажата.

Описаний стилей и тем элементов управления Avalonia как таковых нет, но всё это доступно в иcходниках на GitHub. Для общего понимания, как работает этот механизм, можно почитать по следующим ссылкам:

→ Ссылка