VisualState-Klasse

VisualState Class

Stellt das Erscheinungsbild des Steuerelements dar, wenn es sich in einem bestimmten Zustand befindet. Visuelle Zustände verwenden ein Storyboard, um Benutzeroberflächeneigenschaften in Steuerelementvorlagen festzulegen, in denen der VisualState definiert wird.

Vererbung

Object
  DependencyObject
    VisualState

Syntax


public sealed class VisualState : DependencyObject


<VisualState x:Name="stateName" />
-or-
<VisualState x:Name="stateName">
  singleStoryboard
</VisualState>

XAML Values

stateName

Der Name dieses VisualState, für den Zweck es als Ziel für einen GoToState-Aufruf zu verwenden. Siehe Hinweise.

singleStoryboard

Ein einzelnes Storyboard-Objektelement. Dieses Storyboard sollte die speziellen Zeitachsenanimationen enthalten, die vom VisualState verwendet werden sollen. Jede Animation ändert die Eigenschaftswerte in der Steuerelementvorlage, wenn der visuelle Zustand als aktueller Zustand verwendet wird.

Attribute

[ContentProperty("Name=Storyboard")]
[MarshalingBehavior(Agile)]
[Threading(Both)]
[Version(0x06020000)]
[WebHostHidden()]

Member

VisualStateKlasse hat diese Membertypen:

Konstruktoren

VisualStateKlasse hat diese Konstruktoren.

KonstruktorBeschreibung
VisualState Initializes a new instance of the VisualState class.

 

Methoden

The VisualState Klasse hat diese Methoden. Es erbt auch Methoden von Object Klasse.

MethodeBeschreibung
ClearValue Clears the local value of a dependency property. (Geerbt von DependencyObject)
GetAnimationBaseValue Returns any base value established for a dependency property, which would apply in cases where an animation is not active. (Geerbt von DependencyObject)
GetValue Returns the current effective value of a dependency property from a DependencyObject. (Geerbt von DependencyObject)
ReadLocalValue Returns the local value of a dependency property, if a local value is set. (Geerbt von DependencyObject)
SetValue Sets the local value of a dependency property on a DependencyObject. (Geerbt von DependencyObject)

 

Eigenschaften

Der VisualStateKlasse hat diese Eigenschaften.

EigenschaftZugriffstypBeschreibung

Dispatcher

SchreibgeschütztGets the CoreDispatcher that this object is associated with. (Geerbt von DependencyObject)

Name

SchreibgeschütztGets the name of the VisualState.

Storyboard

Lese-/SchreibzugriffGets or sets a Storyboard that defines state-specific property values and appearance of the control when it is using this visual state.

 

Hinweise

Geben Sie immer einen x:Name-Wert für jeden VisualState an, den Sie definieren. Wenn Sie keinen Namen zugewiesen haben, können Sie diesen VisualState nicht laden. Die GoToState-Methode (die in der Regel aus dem Steuerelementcode aufgerufen wird), erfordert einen stateName-Parameter, um VisualStateManager zu informieren, welcher Zustand als aktueller Zustand verwendet werden soll. Wenn Sie visuelle Übergänge verwenden, wird auf den x:Name-Wert eines VisualState auch durch die Werte von From oder To einer VisualTransition verwiesen. In diesem Fall bezeichnet der Name den Zustand oder die Zustände, für die VisualTransition die Zwischenwerte bereitstellt.

Der x:Name-Wert, den Sie für einen VisualState angeben, muss im Steuerelementvorlagen-XAML, in dem der VisualState vorhanden ist, eindeutig sein. Der Bereich für Zustandsnamen wird nicht nur für jede VisualStateGroup festgelegt, sondern für alle visuellen Zustände in der Vorlage. Sie können beispielsweise zwei unterschiedliche Zustände namens "Focused" in derselben Vorlagen-XAML definieren, selbst wenn sie sich in unterschiedlichen Gruppen befinden.

Sie müssen das x:Name-Attribut verwenden, um einen visuellen Zustand oder eine Gruppe des visuellen Zustands zu benennen; das nicht präfigierte "Name"-Attribut funktioniert nicht. VisualState und VisualStateGroup haben jeweils eine Name-Eigenschaft, diese ist jedoch schreibgeschützt. Diese Name-Eigenschaft existiert für erweiterte Szenarien, in denen mithilfe von Code den Inhalt einer Steuerelementvorlage zur Laufzeit untersucht wird, und dient nicht zu Festlegen von XAML.

Ein VisualState-Element muss immer innerhalb eines übergeordneten VisualStateGroup-Elements im XAML-Markup enthalten sein. Die VisualStateGroup enthält eine implizite Auflistungseigenschaft States, sodass Sie jeden VisualState als unmittelbar untergeordnetes Element der übergeordneten VisualStateGroup einfügen können. Beispiel:



<VisualStateGroup x:Name="CommonStates">
   <VisualState x:Name="Normal" />
   <VisualState x:Name="PointerOver">...</VisualState>
<!-- do not need explicit VisualStateGroups.States property element, States is the XAML content property-->
</VisualStateGroup>


Es ist zulässig und allgemein üblich, einen VisualState zu definieren, der über ein x:Name-Attribut verfügt, jedoch keine Werte im Storyboard angibt. Dies ist hilfreich, da ein solcher VisualState die Werte verwendet, die in der Standardvorlage vorhanden sind. Sie können dann den leeren Zustand von einem GoToState-Aufruf explizit anfordern. Wenn ein leerer Zustand zum aktuellen Zustand wird, werden von diesem alle Änderungen an Vorlageneigenschaften abgebrochen, die von einem vorherigen visuellen Zustand aus derselben VisualStateGroup vorgenommen wurden. Weitere Informationen zum Verwenden von Gruppen für visuelle Zustände finden Sie unter Storyboard-Animationen für visuelle Zustände.

Ersetzen der Steuerelementvorlage eines vorhandenen Steuerelements

Wenn Sie ein App-Entwickler sind, der ein Steuerelement in der App-Benutzeroberfläche verwendet, können Sie die Steuerelementvorlage ersetzen, indem Sie die Control.Template-Eigenschaft auf einen anderen Wert festlegen. Oder Sie können die Vorlage ersetzen, indem Sie ein neues Format deklarieren, das die implizite Formattaste für dieses Steuerelement verwendet. Weitere Informationen zu diesen Konzepten finden Sie unter Schnellstart: Steuerelementvorlagen.

Wenn Sie eine Steuerelementvorlage ersetzen, ist es wichtig, dass Sie alle vorhandenen benannten VisualState-Elemente vom ursprünglichen VisualStateManager.VisualStateGroups-Inhalt der Steuerelementvorlage in XAML reproduzieren. Der Steuerelementcode (den Sie nicht ändern) ruft GoToState auf. Zustände mit diesen Namen müssen in der Steuerelementvorlage vorhanden sein. Eine Anforderung eines fehlenden VisualState löst keine Ausnahmen aus, belässt das Steuerelement aber oftmals in einem visuellen Zustand, was den Benutzer verwirren kann. Wenn Sie beispielsweise keinen VisualState namens "Überprüft" für ein CheckBox-Steuerelement bereitstellen, wird kein visuelles Feedback angezeigt, wenn der Benutzer das Steuerelement auswählt. Der Benutzer erwartet, dass sich ein aktiviertes CheckBox von einem deaktivierten CheckBox visuell unterscheiden lässt. Wenn daher der App-Entwickler die visuellen Zustände nicht ordnungsgemäß reproduziert, hält der Benutzer das Steuerelement für beschädigt.

Wenn Sie eine IDE wie Microsoft Visual Studio verwenden, bieten die Aktionen, mit denen Sie eine Steuerelementvorlage ersetzen, die Option, mit einer Kopie der ursprünglichen XAML-Vorlage zu starten, sodass Sie alle ursprünglich benannten und zu ersetzenden VisualState-Elemente und andere Steuerelementkompositionen anzeigen können. Es empfiehlt sich, mit Vorlagenkopien zu beginnen, diese dann zu ändern, damit Sie nicht versehentlich einen erwarteten visuellen Zustand aus der neuen Vorlage weglassen.

Zuschreiben von benannten visuellen Zuständen eines benutzerdefinierten Steuerelements

Wenn Sie ein benutzerdefiniertes Steuerelement definieren, das visuelle Zustände in der Steuerelementvorlagen-XAML hat, ist es empfehlenswert, die Steuerelementklasse zuzuschreiben, um für die Steuerelementbenutzer anzugeben, welche visuellen Zustände verfügbar sind. Dazu wenden Sie ein oder mehrere TemplateVisualState-Attribute auf der Klassenebene des Steuerdefinitionscodes an. Jedes Attribut sollte x:Name des Zustands angeben, bei dem es sich um den stateName-Wert handelt, den ein Steuerelementnutzer in einem GoToState-Aufruf übergeben würde, um diesen visuellen Zustand zu verwenden. Wenn der VisualState Teil einer VisualStateGroup ist, sollte das in den Attributwerten ebenfalls angegeben werden.

Beispiele

Dieses Beispiel erstellt eine VisualStateGroup in der ControlTemplate einer Button namens "CommonStates" und fügt VisualState-Objekte für die Zustände "Normal", "Pressed" und "PointerOver" hinzu. Button definiert auch einen Zustand mit dem Namen "Disabled", der sich in den "CommonStates" mit der Bezeichnung VisualStateGroup befindet, aber dieser Zustand wurde der Kürze halber im Beispiel weggelassen.


<ControlTemplate TargetType="Button">
  <Border x:Name="RootElement">

    <VisualStateManager.VisualStateGroups>

      <!--Define the states for the common states.
          The states in the VisualStateGroup are mutually exclusive to
          each other.-->
      <VisualStateGroup x:Name="CommonStates">

        <!--The Normal state is the state the button is in
            when it is not in another state from this VisualStateGroup.-->
        <VisualState x:Name="Normal" />

        <!--Change the SolidColorBrush, BorderBrush, to red when the
            Pointer is over the button.-->
        <VisualState x:Name="PointerOver">
          <Storyboard>
            <ColorAnimation Storyboard.TargetName="BorderBrush" 
                              Storyboard.TargetProperty="Color" To="Red" />

          </Storyboard>

        </VisualState>

        <!--Change the SolidColorBrush, BorderBrush, to Transparent when the
            button is pressed.-->
        <VisualState x:Name="Pressed">
          <Storyboard >
            <ColorAnimation Storyboard.TargetName="BorderBrush" 
                              Storyboard.TargetProperty="Color" To="Transparent"/>
          </Storyboard>
        </VisualState>
          <!--The Disabled state is omitted for brevity.-->
        </VisualStateGroup>
  
    </VisualStateManager.VisualStateGroups>
    

    <Border.Background>
      <SolidColorBrush x:Name="BorderBrush" Color="Black"/>
    </Border.Background>

    <Grid Background="{TemplateBinding Background}" Margin="4">
      <ContentPresenter
        HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
        VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
        Margin="4,5,4,4" />

    </Grid>


  </Border>
</ControlTemplate>


Anforderungen

Mindestens unterstützter Client

Windows 8 [Nur Windows Store-Apps]

Mindestens unterstützter Server

Windows Server 2012 [Nur Windows Store-Apps]

Namespace

Windows.UI.Xaml
Windows::UI::Xaml [C++]

Metadaten

Windows.winmd

Siehe auch

DependencyObject
VisualStateGroup
Storyboard-Animationen für visuelle Zustände
Storyboard-Animationen
x:Name-Attribut
Schnellstart: Steuerelementvorlagen
Formatieren von Steuerelement und App im XAML-Beispiel

 

 

Anzeigen:
© 2017 Microsoft