loading experience

Avalonia UI

Avalonia: stili con selettori, tema Fluent e modalità scura

Il sistema di stili di Avalonia ricorda i CSS: classi, pseudo-classi e temi chiaro e scuro.

Avalonia: stili con selettori, tema Fluent e modalità scura

Chi arriva da WPF trova in Avalonia una grande novità: gli stili si applicano con selettori simili a quelli dei CSS, invece che con trigger e chiavi di risorsa.

Dal ritocco puntuale al tema completo, con selettori simili ai CSS.
Dal ritocco puntuale al tema completo, con selettori simili ai CSS.

Il tema di base

<Application xmlns="https://github.com/avaloniaui"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             x:Class="Magazzino.App"
             RequestedThemeVariant="Default">
    <Application.Styles>
        <FluentTheme />
    </Application.Styles>
</Application>

Con RequestedThemeVariant="Default" l'applicazione segue il tema chiaro o scuro del sistema operativo; si può forzare Light o Dark.

Classi e pseudo-classi

<Window.Styles>
    <Style Selector="Button.primario">
        <Setter Property="Background" Value="#2a8442" />
        <Setter Property="Foreground" Value="White" />
        <Setter Property="CornerRadius" Value="8" />
    </Style>
    <Style Selector="Button.primario:pointerover /template/ ContentPresenter">
        <Setter Property="Background" Value="#23703a" />
    </Style>
    <Style Selector="TextBox:error">
        <Setter Property="BorderBrush" Value="Firebrick" />
    </Style>
</Window.Styles>

<Button Classes="primario" Content="Conferma ordine" />

Le classi si possono aggiungere e togliere anche da codice o da binding (Classes.attivo="{Binding IsAttivo}"), un modo pulito per cambiare aspetto in base allo stato.

Risorse per i due temi

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.ThemeDictionaries>
            <ResourceDictionary x:Key="Light">
                <SolidColorBrush x:Key="SfondoPannello" Color="#F4F6F8" />
            </ResourceDictionary>
            <ResourceDictionary x:Key="Dark">
                <SolidColorBrush x:Key="SfondoPannello" Color="#1E2226" />
            </ResourceDictionary>
        </ResourceDictionary.ThemeDictionaries>
    </ResourceDictionary>
</Application.Resources>

<Border Background="{DynamicResource SfondoPannello}" />

ControlTheme

Per ridisegnare completamente un controllo si usa un ControlTheme, che ne definisce template e stili di base. Per piccoli ritocchi, invece, gli stili con selettore sono più semplici e restano compatibili con gli aggiornamenti del tema Fluent.

Commenti (0)

Nessun commento ancora.

Lascia un commento