La sintassi XAML di Windows Presentation Foundation

di Marco Leoncini, in Windows Presentation Foundation,

Nel precedente articolo abbiamo visto come iniziare a sviluppare applicazioni con WinFX, semplici esempi di XAML e in particolare quello che accade dietro le quinte durante lo sviluppo con Windows Presentation Foundation(WPF).

In questo vedremo nel dettaglio la sintassi XAML e quali sono gli elementi che introduce per semplificare la definizione dell'interfaccia grafica di un'applicazione.

Proprietà

Nelle classiche applicazioni web/windows lo stato di un oggetto è generalmente determinato attraverso le proprietà che il tipo espone. WPF introduce un concetto più articolato e complesso di proprietà che prende il nome di Dependency Properties

Al fine di facilitarne l'utilizzo ogni Dependency Property viene esposta tramite un wrapper come una comune proprietà del common language runtime (CLR) e benché quando sviluppiamo applicazioni per WPF sia possibile ignorare ciò che accade dietro le quinte, è necessario prendere confidenza con il Property System di WPF per poterne sfruttare le caratteristiche e trarne tutti i benefici.

Dependency properties

Sotto questo nome si cela uno degli aspetti fondamentali del Property System di WPF, che aggiunge alle classiche proprietà una serie di caratteristiche:

  • Ereditare (non in senso Object Oriented) il valore della proprietà dall'elemento padre.
    Nell'esempio seguente la dimensione del font del bottone è determinata da quanto impostato nell'elemento contenitore tramite TextBlock.FontSize, nel nostro caso uno StackPanel:

    <StackPanel TextBlock.FontSize="24">
        <Button>Hello WPF</Button>
       
    </StackPanel>
  • Impostare il valore della proprietà mediante la valutazione di un'espressione di Binding utilizzando una particolare sintassi chiamata Markup Extensions sincronizzandola all'occorrenza con la sorgente.
    Tramite essa il compilatore XAML è così informato, che il valore della proprietà, sarà determinato a runtime, ad esempio collegandolo ad un'altra proprietà come il colore dello sfondo dello StackPanel:

    <StackPanel Name="myStackPanel" Background="DarkSalmon">
        <Button Background="{Binding ElementName=myStackPanel, Path=Background}">
            hello
        </Button>
    </StackPanel>
  • Impostare il valore di una proprietà utilizzando le Resources e gli Styles, sfruttando anche in questo caso le Markup Extensions.
    Nell'esempio successivo, è definito uno Style per definire il colore di sfondo del bottone. Poiché ogni oggetto che derivi direttamente o indirettamente da FramevorkElement definisce la proprietà Resources, ci è permesso creare risorse locali per ogni elemento, anche se generalmente queste, come in questo caso, vengono definite al livello più alto della gerarchia dei controlli.

    <StackPanel Name="myStackPanel">
        <StackPanel.Resources>
            <Style x:Key="MyStyle">
                <Setter Property="Control.Background" Value="Blue"></Setter>
            </Style>
        </StackPanel.Resources>
        <Button Name="myButton" Style="{StaticResource MyStyle}">hello</Button>
    </StackPanel>
  • Il supporto per Storyborad ed animazioni. La possibilità cioè, di agganciare una o più proprietà ad una serie di animazioni che variano il suo valore nel tempo in base alla timeline definita.
    Nell'esempio successivo alla pressione del pulsante un'animazione della durata di un secondo varia la larghezza del bottone.

    <Button Name="myButton" Style="{StaticResource MyStyle}" Content="Hello">
        <Button.Triggers>
            <EventTrigger RoutedEvent="Button.Click">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimation Storyboard.TargetName="myButton"
                            Storyboard.TargetProperty="(Button.Width)"
                            From="200" To="300" Duration="0:0:1" AutoReverse="True" RepeatBehavior="Forever"/>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Button.Triggers>
    </Button>
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

Nessuna risorsa collegata