Condividi tramite


VisualStateGroup Classe

Definizione

Contiene oggetti VisualState e oggetti VisualTransition che vengono usati per passare da uno stato a un altro.

public ref class VisualStateGroup sealed : DependencyObject
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.UI.Xaml.Markup.ContentProperty(Name="States")]
class VisualStateGroup final : DependencyObject
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.UI.Xaml.Markup.ContentProperty(Name="States")]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
class VisualStateGroup final : DependencyObject
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.UI.Xaml.Markup.ContentProperty(Name="States")]
public sealed class VisualStateGroup : DependencyObject
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.UI.Xaml.Markup.ContentProperty(Name="States")]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
public sealed class VisualStateGroup : DependencyObject
Public NotInheritable Class VisualStateGroup
Inherits DependencyObject
<VisualStateManager.VisualStateGroups>
   <VisualStateGroup x:Name="groupname" ...>
     oneOrMoreVisualStates
   </VisualStateGroup>
   <!--- other peer VisualStateGroup's here ... -->
</VisualStateManager.VisualStateGroups>
Ereditarietà
Object Platform::Object IInspectable DependencyObject VisualStateGroup
Attributi

Requisiti Windows

Famiglia di dispositivi
Windows 10 (è stato introdotto in 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (è stato introdotto in v1.0)

Esempio

In questo esempio viene creato un semplice ControlloTemplate per un pulsante che contiene una griglia. Contiene anche un oggetto VisualStateGroup denominato "CommonStates", che definisce gli stati "PointerOver" e "Normal". VisualStateGroup include anche un oggetto VisualTransition che specifica che richiede una metà del secondo per la griglia di passare da verde a rosso quando l'utente inserisce il puntatore sul pulsante.

<ControlTemplate TargetType="Button">
  <Grid >
    <VisualStateManager.VisualStateGroups>
      <VisualStateGroup x:Name="CommonStates">

        <VisualStateGroup.Transitions>

          <!--Take one half second to transition to the PointerOver state.-->
          <VisualTransition To="PointerOver" 
                              GeneratedDuration="0:0:0.5"/>
        </VisualStateGroup.Transitions>
        
        <VisualState x:Name="Normal" />

        <!--Change the SolidColorBrush, ButtonBrush, to red when the
            Pointer is over the button.-->
        <VisualState x:Name="PointerOver">
          <Storyboard>
            <ColorAnimation Storyboard.TargetName="ButtonBrush" 
                            Storyboard.TargetProperty="Color" To="Red" />
          </Storyboard>
        </VisualState>
      </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <Grid.Background>
      <SolidColorBrush x:Name="ButtonBrush" Color="Green"/>
    </Grid.Background>
  </Grid>
</ControlTemplate>

Commenti

Ogni oggetto VisualStateGroup dichiarato in XAML come parte di un modello di controllo deve sempre avere un attributo x:Name impostato su di esso. Ogni stringa di nome usata nel set di VisualStateGroups in un modello di controllo deve essere univoca in tale modello. È comune usare gli stessi nomi di gruppo per controlli diversi, anche se. Ad esempio, quasi tutti i modelli di controllo esistenti hanno un oggetto VisualStateGroup con attributo x:Name di "CommonStates".

Il set di stati visivi all'interno di ogni VisualStateGroup deve essere a vicenda esclusivo nel gruppo. In altre parole, il controllo deve usare esattamente uno degli stati visivi di ognuno dei gruppi di VisualStateGroup definiti in ogni momento. Ogni volta che si verifica un caso in cui un controllo deve essere contemporaneamente in due stati, assicurarsi che i due stati si trovino in gruppi diversi. Ad esempio, è possibile che un controllo a discesa sia incentrato contemporaneamente e abbia il relativo elenco a discesa aperto. In una progettazione dello stato visivo corretto si dispone di un oggetto VisualStateGroup separato per ogni stato in modo che entrambi possano essere attivi contemporaneamente. Tali gruppi potrebbero avere nomi come "FocusStates" e "DropDownStates".

Ogni volta che si definisce un oggetto VisualStateGroup che abilita un comportamento storyboard temporaneo in uno degli elementi VisualState , assicurarsi che il gruppo contenga anche un secondo oggetto VisualState che può essere chiamato per annullare lo stato precedente. Questo può essere semplice come dichiarare il secondo Oggetto VisualState senza storyboard , solo un attributo x:Name.

Il valore dell'attributo x:Name impostato per un oggetto VisualStateGroup non viene usato per una chiamata a VisualStateManager.GoToState; è invece l'attributo x:Name di un oggetto VisualState usato per VisualStateManager.GoToState. Chiunque usi VisualStateManager.GoToState deve essere consapevole di tutti i gruppi e gli stati disponibili, in modo che ogni chiamata passi correttamente dagli stati precedenti a nuovi stati all'interno di un gruppo.

Oltre a un set di elementi VisualState, un VisualStateGroup può anche definire un set di elementi VisualTransition , in cui ogni VisualTransition riguarda almeno uno degli elementi VisualState definiti nel gruppo. In XAML il set di elementi VisualState può essere dichiarato come elementi figlio dell'elemento oggetto immediato di VisualStateGroup . Ciò è possibile perché la proprietà States , che è la raccolta di stati visivi, è la proprietà contenuto XAML per VisualStateGroup. Al contrario, per impostare la raccolta di transizioni visive, è necessario dichiarare che raccolta all'interno di un elemento proprietà VisualStateGroup.Transitions in XAML. Per altre informazioni sulle proprietà del contenuto XAML, vedere Guida alla sintassi XAML.

Quando si usano StateTriggers per controllare gli stati visivi, il motore trigger usa le regole di precedenza seguenti per assegnare punteggi ai trigger e determinare quale trigger e il corrispondente VisualState saranno attivi:

  1. Trigger personalizzato che deriva da StateTriggerBase
  2. AdaptiveTrigger attivato a causa di MinWindowWidth
  3. AdaptiveTrigger attivato a causa di MinWindowHeight

Se sono presenti più trigger attivi alla volta che hanno un conflitto nell'assegnazione dei punteggi (ad esempio due trigger personalizzati attivi), il primo dichiarato nel file di markup ha la precedenza.

Nota: mentre AdaptiveTrigger deriva da StateTriggerBase, può essere attivato solo tramite l'impostazione minWindowWidth e/o MinWindowHeight.

Visualstategroup API che supportano l'implementazione personalizzata di VisualStateManager

Molte delle API di VisualStateGroup esistono solo per supportare l'implementazione di VisualStateManager personalizzata. Includono: Name, CurrentState, CurrentStateChanging, CurrentStateChanged. L'utilizzo più comune degli stati visivi per i modelli di controllo non richiederà queste API. In particolare non è tipico gestire gli eventi. La maggior parte delle operazioni per la logica per un controllo deve includere le proprie proprietà ed eventi. Per la maggior parte degli scenari di definizione dell'app e del controllo, le modifiche dello stato visivo apportate al controllo devono essere solo un risultato finale della logica che il controllo si applica al relativo modello, non un trigger per altre logiche.

Costruttori

VisualStateGroup()

Inizializza una nuova istanza della classe VisualStateGroup .

Proprietà

CurrentState

Ottiene l'oggetto VisualState impostato più di recente da una chiamata riuscita al metodo GoToState .

Dispatcher

Ottiene CoreDispatcher associato a questo oggetto. CoreDispatcher rappresenta una struttura che può accedere a DependencyObject nel thread dell'interfaccia utente anche se il codice viene avviato da un thread non interfaccia utente.

(Ereditato da DependencyObject)
Name

Ottiene il nome di VisualStateGroup.

States

Ottiene l'insieme di oggetti VisualState esclusivi a vicenda.

Transitions

Ottiene l'insieme di oggetti VisualTransition .

Metodi

ClearValue(DependencyProperty)

Cancella il valore locale di una proprietà di dipendenza.

(Ereditato da DependencyObject)
GetAnimationBaseValue(DependencyProperty)

Restituisce qualsiasi valore di base stabilito per una proprietà di dipendenza, che si applica nei casi in cui un'animazione non è attiva.

(Ereditato da DependencyObject)
GetValue(DependencyProperty)

Restituisce il valore effettivo corrente di una proprietà di dipendenza da un oggetto DependencyObject.

(Ereditato da DependencyObject)
ReadLocalValue(DependencyProperty)

Restituisce il valore locale di una proprietà di dipendenza, se viene impostato un valore locale.

(Ereditato da DependencyObject)
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

Registra una funzione di notifica per l'ascolto delle modifiche a un'istanza di DependencyObject specifica.

(Ereditato da DependencyObject)
SetValue(DependencyProperty, Object)

Imposta il valore locale di una proprietà di dipendenza in un oggetto DependencyObject.

(Ereditato da DependencyObject)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

Annulla una notifica di modifica registrata in precedenza chiamando RegisterPropertyChangedCallback.

(Ereditato da DependencyObject)

Eventi

CurrentStateChanged

Si verifica dopo che un controllo cambia in uno stato diverso.

CurrentStateChanging

Si verifica quando un controllo inizia a cambiare in uno stato diverso.

Si applica a

Vedi anche