Gestire risorse e stili in Windows Presentation Foundation - Seconda parte

di Marco Leoncini, in Windows Presentation Foundation,

L'articolo è la continuazione della prima parte pubblicata il 17 aprile 2007.

Gli stili

Definire n oggetti nelle risorse per n proprietà non gioverebbe sicuramente né alla leggibilità del codice né alla manutenzione.
Ogni oggetto derivato da FrameworkElement o FrameworkContentElement espone una proprietà Style, del tipo omonimo Style, che è essenzialmente una collezione di coppie proprietà/valore.

<Button>
    Ancora Hello World?
        <Button.Style>
            <Style>
                <Setter Property="Button.FontSize" Value="15"/>
                <Setter Property="Button.Width" Value="150"/>
                <Setter Property="Button.Height" Value="50"/>
                <Setter Property="Button.Foreground" Value="White"/>
                <Setter Property="Button.Background" Value="Red"/>
                <Setter Property="Button.Margin" Value="5"/>
                <Setter Property="Button.BitmapEffect">
                    <Setter.Value>
                        <DropShadowBitmapEffect Color="Black" Direction="320" ShadowDepth="5" Softness="0.2" Opacity="0.3"/>
                    </Setter.Value>
                </Setter>
            </Style>
        </Button.Style>
</Button>

L'oggetto Style espone la proprietà Setters: una collezione di oggetti Setter che espongono due proprietà di nome Property e Value. Con la prima indichiamo la proprietà da impostare, mentre con la seconda il valore. Il nome della proprietà è spesso preceduto, ma non sempre, dal nome della classe, dove tale proprietà è definita o dalla quale è ereditata. Nell'esempio seguente la prima e la seconda sintassi sono equivalenti, perché la proprietà FontSize è ereditata da Control:

<Setter Property="Button.FontSize" Value="15"/>

<Setter Property="Control.FontSize" Value="15"/>

Sfruttando la proprietà Style siamo riusciti a raggruppare tutte le impostazioni in un unico oggetto che potremo tranquillamente inserire tra le risorse per riutilizzarlo tra più elementi dell'interfaccia, anche differenti tra loro.

<StackPanel>
    <StackPanel.Resources>
        <Style x:Key="MyStyle">
            <Setter Property="Control.FontSize" Value="15"/>
            <Setter Property="Control.Width" Value="150"/>
            <Setter Property="Control.Height" Value="50"/>
            <Setter Property="Control.Foreground" Value="White"/>
            <Setter Property="Control.Background" Value="Red"/>
            <Setter Property="Control.Margin" Value="5"/>
            <Setter Property="Control.BitmapEffect">
                <Setter.Value>
                    <DropShadowBitmapEffect Color="Black" Direction="320" ShadowDepth="5" Softness="0.2" Opacity="0.3"/>
                </Setter.Value>
            </Setter>
        </Style>
    </StackPanel.Resources>

<Button Style="{StaticResource MyStyle}">
    Ancora Hello World?
</Button>

<TextBlock Style="{StaticResource MyStyle}">
    NO Hello WPF!
</TextBlock >

</StackPanel>
5 pagine in totale: 1 2 3 4 5
Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti