Cenni preliminari sui trigger
[!NOTA]
I trigger non sono supportati nei progetti di Microsoft Silverlight 1.0 o di Silverlight 2. In un'applicazione Silverlight 1.0 tutte le interazioni con l'utente vengono eseguite tramite i gestori degli eventi. Per un esempio, vedere Creare un pulsante che controlla uno storyboard in un'applicazione Silverlight. L'interazione con l'utente in un'applicazione Silverlight 2 avviene tramite i gestori dell'evento o gli stati. Per ulteriori informazioni, vedere Modificare lo stato in risposta all'interazione con l'utente.
Durante l'utilizzo di un'applicazione lo stato degli oggetti presenti nell'interfaccia utente subisce varie modifiche. Lo stato viene spesso espresso in relazione alle operazioni eseguite dall'utente. È ad esempio possibile definire uno stato determinato dal passaggio del mouse su un pulsante oppure dal clic del mouse su una voce di menu. Tali due stati di esempio vengono implementati sugli oggetti mediante la proprietà UIElement.IsMouseOver e la proprietà MenuItem.IsPressed rispettivamente.
Il valore di queste proprietà e, di conseguenza, gli stati che rappresentano non sono tuttavia visibili all'utente, poiché IsMouseOver e IsPressed non sono proprietà visive. Una modifica in una proprietà non visiva risulta visibile se attiva una modifica in una proprietà visiva, ad esempio Background o Opacity. Ad esempio, un pulsante nello stato determinato dal passaggio del mouse passa da una forma piatta a una forma curva oppure il colore di sfondo di una voce di menu viene modificato quando la voce viene selezionata.
Oltre a subire modifiche nello stato, gli oggetti sono in grado di generare eventi. Ad esempio, un pulsante genera gli eventi MouseEnter e MouseLeave quando il puntatore attraversa i limiti del pulsante. Anche gli eventi non risultano visibili. Per essere percepito dall'utente, un evento deve quindi attivare una modifica in una proprietà visiva.
È possibile creare i trigger (e le sequenze temporali di animazione) nell'elemento principale di un documento o in uno stile applicato a un controllo. Ad esempio, è possibile modificare lo stile di un pulsante per fare in modo che l'aspetto del pulsante cambi leggermente quando lo stato associato alla pressione o all'effetto di attivazione del pulsante viene modificato. Tutti i pulsanti a cui verrà applicato lo stile si comporteranno nello stesso modo. Per un esempio, vedere Esercitazione: aggiungere un'animazione a un pulsante.
Sono disponibili i due tipi di trigger seguenti:
Trigger di proprietà Meccanismo in base al quale la modifica di una proprietà attiva una modifica immediata o animata in un'altra proprietà.
Trigger di evento Meccanismo in base al quale un evento attiva una modifica animata in una proprietà.
Nell'immagine seguente viene illustrata l'interfaccia utente Trigger con due trigger di proprietà (IsMouseOver e IsPressed) e un trigger di evento (target-element.Loaded). Il trigger di proprietà IsMouseOver è selezionato e mostra la proprietà modificata (Border.Background) e la sequenza temporale attivata (OnLoaded1).
Per alcuni esempi sull'utilizzo dei trigger, vedere Aggiungere o rimuovere un trigger e Creare un'animazione semplice.
Torna all'inizio
Trigger di proprietà
Un trigger di proprietà definisce una condizione e le azioni da eseguire successivamente se la condizione viene soddisfatta. Una condizione di esempio è "la proprietà IsMouseOver del pulsante 1 è true", mentre le azioni da eseguire sono ad esempio "impostare la proprietà Foreground del pulsante 1 sul colore rosso e avviare l'animazione denominata Espandi che consente di aumentare la scala del pulsante".
L'impostazione della proprietà Foreground sul colore rosso costituisce un esempio di azione denominata setter di proprietà. Il setter è attivo solo quando la condizione è soddisfatta. In caso contrario, viene ripristinato il valore precedente della proprietà. L'avvio dell'animazione denominata Espandi costituisce invece un esempio di un'azione di avvio, eseguita non appena la condizione viene soddisfatta. Quando la condizione non è più soddisfatta, viene eseguita un'azione di uscita. Questi tipi di azione possono controllare solo le animazioni. Nella figura seguente viene illustrato il ciclo di vita relativo al trigger di proprietà di esempio.
Si noti che il setter è in grado di controllare la proprietà Foreground durante tutto il ciclo di vita. Nella fase 5 la proprietà Foreground viene automaticamente reimpostata sul colore nero. Tutte le animazioni relative alla proprietà eseguite dall'azione di avvio non vengono tuttavia annullate. Nella fase 5 infatti la scala del pulsante è ancora impostata su un valore superiore. La soluzione consiste nel creare un'animazione Restringi che riduce nuovamente la scala del pulsante e quindi avviare la nuova animazione in un'azione di uscita.
Un trigger di proprietà può essere definito solo in uno stile oppure in un modello. È tuttavia consigliabile, quando possibile, inserire i trigger in un modello.
Torna all'inizio
Trigger di evento
Un trigger di evento definisce una condizione e le azioni da eseguire successivamente se la condizione viene soddisfatta. Una condizione di esempio è "l'evento MouseEnter è stato generato per il pulsante 1", mentre l'azione da eseguire è ad esempio "avviare l'animazione denominata Espandi che consente di aumentare la scala del pulsante".
L'azione di esempio è analoga all'azione di avvio utilizzata in precedenza nell'esempio relativo al trigger di proprietà. Il ciclo di vita di un trigger di evento non è uguale a quello di un trigger di proprietà, poiché un trigger di evento esegue semplicemente le azioni in risposta a un evento. Al trigger di evento sono associate pertanto solo azioni e non azioni di avvio e di uscita.
Se si desidera fare in modo che la scala di un pulsante aumenti quando il puntatore del mouse viene spostato all'interno dei limiti del pulsante e che le dimensioni del pulsante tornino normali quando il puntatore viene spostato all'esterno dei limiti, è necessario definire una coppia di trigger di evento con animazioni complementari relative alla scala. Un trigger di evento può essere definito in uno stile, in un modello oppure in LayoutRoot.
Torna all'inizio
Scelta tra trigger di proprietà e trigger di evento
Poiché a una proprietà è spesso associato un set di eventi corrispondente, è possibile decidere se creare un trigger di proprietà o due trigger di evento. Ad esempio, è possibile ottenere lo stesso effetto utilizzando il trigger di proprietà IsMouseOver o una coppia di trigger di evento MouseEnter e MouseLeave. È consigliabile utilizzare trigger di proprietà quando è possibile e trigger di evento solo se è necessario, ad esempio quando non si opera all'interno di uno stile o di un modello. Quando è necessario utilizzare trigger di evento, è possibile creare una coppia di animazioni con fotogrammi chiave all'istante zero per compensare la mancanza di setter.
Torna all'inizio
Scelta tra trigger e metodo del gestore dell'evento
È possibile utilizzare un gestore di evento per eseguire tutte le operazioni che possono essere eseguite mediante un trigger. Il gestore di evento consente inoltre di aggiungere qualsiasi altra logica di programmazione, ad esempio per impostare una proprietà su un altro elemento, caricare un nuovo documento, creare un nuovo elemento e così via, poiché i metodi del gestore dell'evento sono definiti nel file code-behind del documento, in C# o Microsoft Visual Basic .NET. Per ulteriori informazioni, vedere Cenni preliminari sulla gestione di eventi.
Per un elenco di eventi che è possibile collegare mediante trigger o metodi del gestore dell'evento, vedere Riferimenti rapidi sugli eventi WPF.
Torna all'inizio