Gestire risorse e stili in Windows Presentation Foundation - Seconda parte

5 pagine in totale: <<Indietro 1 [2] 3 4 5 Avanti >>

Ma cosa accade se in uno Style è impostata una proprietà non esposta da tutti gli elementi a cui è applicato? Come la proprietà IsDefault non definita anche dal controllo Label:

<Setter Property="Button.IsDefault" Value="True"/>

In questo caso il Setter è semplicemente ignorato, non generando nessuna eccezione.
Vi è comunque un'apparente incongruenza presente nel codice precedente: siccome l'oggetto TextBlock non eredita da Control non dovrebbe essere possibile cambiarne il colore del carattere tramite Setter.

Le DependecyProperty sono molto più complesse rispetto alle normali proprietà che siamo abituati ad utilizzare nel Framework. Nel precedente esempio entra in gioco un'implementazione non documentata dell'oggetto TextBlock, il quale usa il metodo DependencyProperty.AddOwner per diventare proprietario di una DependecyProperty già esistente (in questo caso la FontSizeProperty della classe TextElement).

L'oggetto Style definisce la proprietà TargetType, mediante la quale è possibile definire il tipo dell'oggetto (e solo a quello) al quale lo style sarà applicato rendendo superfluo sia qualificare il nome della proprietà con la classe sia impostare esplicitamente la proprietà Style mediante l'uso delle Markup Extension.

<StackPanel>
    <StackPanel.Resources>
        <Style TargetType="{x:Type Button}">
            <Setter Property="FontSize" Value="15"/>
            <Setter Property="Width" Value="150"/>
            <Setter Property="Height" Value="50"/>
            <Setter Property="Foreground" Value="White"/>
            <Setter Property="Background" Value="Red"/>
            <Setter Property="Margin" Value="5"/>
            <Setter Property="IsDefault" Value="True"/>
            <Setter Property="BitmapEffect">
                <Setter.Value>
                    <DropShadowBitmapEffect Color="Black" Direction="320" ShadowDepth="5" Softness="0.2" Opacity="0.3"/>
                </Setter.Value>
            </Setter>
        </Style>
    </StackPanel.Resources>
    <Button>
    Ancora Hello World?
    </Button>
</StackPanel>

Nel codice precedente notiamo, in contrasto con quanto abbiamo detto finora, l'assenza dell'attributo x:Key, poiché la chiave che identifica univocamente l'oggetto viene generata implicitamente utilizzando il Type.

L'oggetto Style espone un'altra importante proprietà del tipo ResourceDictionary chiamata Resources, dal nome e dallo scopo del tutto analogo a quella esposta da ogni oggetto che derivi da FrameworkElement.

<StackPanel>
    <StackPanel.Resources>
        <Style TargetType="{x:Type Button}">
            <Style.Resources>
                <LinearGradientBrush x:Key="YellowToRedBackground " StartPoint="0,0" EndPoint="0,1">
                    <GradientStop Color="Yellow" Offset="0.0" />
                    <GradientStop Color="Red" Offset="1" />
                </LinearGradientBrush>
                <DropShadowBitmapEffect x:Key="ShadowEffect" Color="Black" Direction="320" ShadowDepth="5" Softness="0.2" Opacity="0.3"/>
            </Style.Resources>
            <Setter Property="FontSize" Value="15"/>
            <Setter Property="Width" Value="150"/>
            <Setter Property="Height" Value="50"/>
            <Setter Property="Foreground" Value="White"/>
            <Setter Property="Background" Value="{StaticResource YellowToRedBackground }"/>
            <Setter Property="Margin" Value="5"/>
            <Setter Property="IsDefault" Value="True"/>
            <Setter Property="BitmapEffect" Value="{StaticResource ShadowEffect}"/>
        </Style>

    </StackPanel.Resources>

    <Button>
    Ancora Hello World?
    </Button>

</StackPanel>

5 pagine in totale: <<Indietro 1 [2] 3 4 5 Avanti >>

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.
federico.caselli scrive:
Gestire risorse e stili in Windows Presentation Foundation - Seconda parte

Volevo provare il codice di esempio, ma quando utilizzo BitmapEffect nella mia pagina XBAP, il browser si ferma al momento del caricamento con un ...
venerdì 6 giugno 2008

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.



TUTORIALS


IN EVIDENZA
MISC