VisualStateManager.GoToElementState(FrameworkElement, String, Boolean) Metoda

Definicja

Przenosi element między dwoma stanami. Ta metoda służy do przenoszenia stanów zdefiniowanych przez aplikację, a nie zdefiniowanych przez kontrolkę.

public:
 static bool GoToElementState(System::Windows::FrameworkElement ^ stateGroupsRoot, System::String ^ stateName, bool useTransitions);
public static bool GoToElementState (System.Windows.FrameworkElement stateGroupsRoot, string stateName, bool useTransitions);
static member GoToElementState : System.Windows.FrameworkElement * string * bool -> bool
Public Shared Function GoToElementState (stateGroupsRoot As FrameworkElement, stateName As String, useTransitions As Boolean) As Boolean

Parametry

stateGroupsRoot
FrameworkElement

Element główny zawierający VisualStateManagerelement .

stateName
String

Stan do przejścia do.

useTransitions
Boolean

true aby użyć VisualTransition obiektu do przejścia między stanami; w przeciwnym razie false.

Zwraca

Boolean

true jeśli kontrolka została pomyślnie przeniesiona do nowego stanu; w przeciwnym razie , false.

Wyjątki

stateGroupsRoot to null.

-lub- stateName to null.

Przykłady

Poniższy przykład tworzy aplikację, która monituje użytkownika o odgadnięcie liczby z zakresu od 1 do 100. Gdy użytkownik wprowadzi liczbę, aplikacja wskazuje, czy odgadnięcie jest zbyt wysokie, zbyt niskie, czy poprawne. Poniższy kod XAML tworzy interfejs użytkownika dla aplikacji i definiuje 4 stany: TooLow, , TooHigh``Correcti Guessing. Po rozpoczęciu aplikacji jest ona w Guessing stanie. .

<Grid x:Name="LayoutRoot">
  <Grid.Background>
    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
      <GradientStop Color="#FF022343" Offset="0"/>
      <GradientStop Color="#FF006BD2" Offset="1"/>
    </LinearGradientBrush>
  </Grid.Background>
  <VisualStateManager.VisualStateGroups>
    <VisualStateGroup x:Name="ResultStates">
      <VisualStateGroup.Transitions>
        <VisualTransition GeneratedDuration="0:0:0.5">
          <VisualTransition.GeneratedEasingFunction>
            <CubicEase EasingMode="EaseOut"/>
          </VisualTransition.GeneratedEasingFunction>
        </VisualTransition>
      </VisualStateGroup.Transitions>
      <VisualState x:Name="TooLow">
        <Storyboard>
          <ColorAnimationUsingKeyFrames 
            Storyboard.TargetProperty="(Panel.Background).
              (GradientBrush.GradientStops)[1].(GradientStop.Color)" 
            Storyboard.TargetName="LayoutRoot">
            <EasingColorKeyFrame KeyTime="0" Value="#FFD22700"/>
          </ColorAnimationUsingKeyFrames>
          <ColorAnimationUsingKeyFrames 
            Storyboard.TargetProperty="(Panel.Background).
              (GradientBrush.GradientStops)[0].(GradientStop.Color)" 
            Storyboard.TargetName="LayoutRoot">
            <EasingColorKeyFrame KeyTime="0" Value="#FFE2D7D0"/>
          </ColorAnimationUsingKeyFrames>
          <DoubleAnimationUsingKeyFrames 
            Storyboard.TargetProperty="(UIElement.RenderTransform).
              (TransformGroup.Children)[0].(ScaleTransform.ScaleX)" 
            Storyboard.TargetName="viewbox">
            <EasingDoubleKeyFrame KeyTime="0" Value="1"/>
          </DoubleAnimationUsingKeyFrames>
          <DoubleAnimationUsingKeyFrames 
            Storyboard.TargetProperty="(UIElement.RenderTransform).
              (TransformGroup.Children)[0].(ScaleTransform.ScaleY)" 
            Storyboard.TargetName="viewbox">
            <EasingDoubleKeyFrame KeyTime="0" Value="1"/>
          </DoubleAnimationUsingKeyFrames>
          <DoubleAnimationUsingKeyFrames
            Storyboard.TargetProperty="(Panel.Background).
              (GradientBrush.GradientStops)[0].(GradientStop.Offset)" 
            Storyboard.TargetName="LayoutRoot">
            <EasingDoubleKeyFrame KeyTime="0" Value="0.5"/>
          </DoubleAnimationUsingKeyFrames>
        </Storyboard>
      </VisualState>
      <VisualState x:Name="TooHigh">
        <Storyboard>
          <ColorAnimationUsingKeyFrames 
            Storyboard.TargetProperty="(Panel.Background).
              (GradientBrush.GradientStops)[1].(GradientStop.Color)" 
            Storyboard.TargetName="LayoutRoot">
            <EasingColorKeyFrame KeyTime="0" Value="#FFF3EBE9"/>
          </ColorAnimationUsingKeyFrames>
          <ColorAnimationUsingKeyFrames 
            Storyboard.TargetProperty="(Panel.Background).
              (GradientBrush.GradientStops)[0].(GradientStop.Color)" 
            Storyboard.TargetName="LayoutRoot">
            <EasingColorKeyFrame KeyTime="0" Value="#FFF12807"/>
          </ColorAnimationUsingKeyFrames>
          <DoubleAnimationUsingKeyFrames 
            Storyboard.TargetProperty="(UIElement.RenderTransform).
              (TransformGroup.Children)[0].(ScaleTransform.ScaleX)" 
            Storyboard.TargetName="viewbox">
            <EasingDoubleKeyFrame KeyTime="0" Value="1"/>
          </DoubleAnimationUsingKeyFrames>
          <DoubleAnimationUsingKeyFrames 
            Storyboard.TargetProperty="(UIElement.RenderTransform).
              (TransformGroup.Children)[0].(ScaleTransform.ScaleY)" 
            Storyboard.TargetName="viewbox">
            <EasingDoubleKeyFrame KeyTime="0" Value="1"/>
          </DoubleAnimationUsingKeyFrames>
          <DoubleAnimationUsingKeyFrames 
            Storyboard.TargetProperty="(Panel.Background).
              (GradientBrush.GradientStops)[1].(GradientStop.Offset)" 
            Storyboard.TargetName="LayoutRoot">
            <EasingDoubleKeyFrame KeyTime="0" Value="0.5"/>
          </DoubleAnimationUsingKeyFrames>
        </Storyboard>
      </VisualState>
      <VisualState x:Name="Correct">
        <Storyboard>
          <ColorAnimationUsingKeyFrames 
            Storyboard.TargetProperty="(Panel.Background).
              (GradientBrush.GradientStops)[0].(GradientStop.Color)" 
            Storyboard.TargetName="LayoutRoot">
            <EasingColorKeyFrame KeyTime="0" Value="#FF0E4302"/>
          </ColorAnimationUsingKeyFrames>
          <ColorAnimationUsingKeyFrames 
            Storyboard.TargetProperty="(Panel.Background).
              (GradientBrush.GradientStops)[1].(GradientStop.Color)" 
            Storyboard.TargetName="LayoutRoot">
            <EasingColorKeyFrame KeyTime="0" Value="#FF14D200"/>
          </ColorAnimationUsingKeyFrames>
          <DoubleAnimationUsingKeyFrames 
            Storyboard.TargetProperty="(UIElement.RenderTransform).
              (TransformGroup.Children)[0].(ScaleTransform.ScaleX)" 
            Storyboard.TargetName="viewbox">
            <EasingDoubleKeyFrame KeyTime="0" Value="1"/>
          </DoubleAnimationUsingKeyFrames>
          <DoubleAnimationUsingKeyFrames 
            Storyboard.TargetProperty="(UIElement.RenderTransform).
              (TransformGroup.Children)[0].(ScaleTransform.ScaleY)" 
            Storyboard.TargetName="viewbox">
            <EasingDoubleKeyFrame KeyTime="0" Value="1"/>
          </DoubleAnimationUsingKeyFrames>
        </Storyboard>
      </VisualState>
      <VisualState x:Name="Guessing"/>
    </VisualStateGroup>
  </VisualStateManager.VisualStateGroups>
  <Grid.RowDefinitions>
    <RowDefinition Height="Auto"/>
    <RowDefinition Height="Auto"/>
    <RowDefinition/>
  </Grid.RowDefinitions>
  <Grid.ColumnDefinitions>
    <ColumnDefinition/>
    <ColumnDefinition Width="247"/>
  </Grid.ColumnDefinitions>
  <TextBlock Grid.Row="0" Grid.ColumnSpan="2" Margin="20,5,20,5" 
             FontSize="24" Foreground="White"
             Text="Guess a number between 1 and 100"/>
  <TextBox x:Name="Guess" Grid.Row="1" Margin="20,20,10,10" 
           TextWrapping="Wrap" FontSize="48" 
           TextChanged="OnTypingGuess"/>
  <Button x:Name="GuessButton" Grid.Row="1" Content="Guess" 
          Margin="10,20,20,10" Grid.Column="1" 
          FontSize="48" Click="OnGuess" 
          IsDefault="True"/>
  <Viewbox x:Name="viewbox" Grid.ColumnSpan="2" Grid.Row="2"
           Margin="20,10,20,20" RenderTransformOrigin="0.5,0.5">
    <Viewbox.RenderTransform>
      <TransformGroup>
        <ScaleTransform ScaleX="0" ScaleY="0"/>
        <SkewTransform/>
        <RotateTransform/>
        <TranslateTransform/>
      </TransformGroup>
    </Viewbox.RenderTransform>
    <TextBlock x:Name="Result" TextWrapping="Wrap"/>
  </Viewbox>
</Grid>

Poniższy kod przedstawia logikę aplikacji. Gdy użytkownik wprowadzi liczbę i kliknie przycisk, aplikacja wywołuje polecenie GoToElementState , aby przejść do TooHighmetody , TooLowlub Correct przekazać opinię użytkownikowi na temat odgadnięcia. Aby wypróbować ten przykład, wywołaj metodę GenerateNumber po rozpoczęciu aplikacji.

int number;

private void GenerateNumber()
{
    System.Random r = new System.Random();
    number = r.Next(100) + 1;
}

private void OnGuess(object sender, System.Windows.RoutedEventArgs e)
{
    int guess;

    if (int.TryParse(this.Guess.Text, out guess))
    {
        if (guess < this.number)
        {
            VisualStateManager.GoToElementState(this.LayoutRoot, "TooLow", true);
            this.Result.Text = "Too Low!";
        }
        else if (guess > this.number)
        {
            VisualStateManager.GoToElementState(this.LayoutRoot, "TooHigh", true);
            this.Result.Text = "Too High!";
        }
        else
        {
            VisualStateManager.GoToElementState(this.LayoutRoot, "Correct", true);
            this.Result.Text = "Correct!";
        }
    }
}

private void OnTypingGuess(object sender, System.Windows.Controls.TextChangedEventArgs e)
{
    VisualStateManager.GoToElementState(this.LayoutRoot, "Guessing", true);
    this.Result.Text = "";
}
Private number As Integer

Private Sub GenerateNumber()
    Dim r As New System.Random()
    number = r.Next(100) + 1
End Sub

Private Sub OnGuess(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs)
    Dim guess As Integer

    If Integer.TryParse(Me.Guess.Text, guess) Then
        If guess < Me.number Then
            VisualStateManager.GoToElementState(Me.LayoutRoot, "TooLow", True)
            Me.Result.Text = "Too Low!"
        ElseIf guess > Me.number Then
            VisualStateManager.GoToElementState(Me.LayoutRoot, "TooHigh", True)
            Me.Result.Text = "Too High!"
        Else
            VisualStateManager.GoToElementState(Me.LayoutRoot, "Correct", True)
            Me.Result.Text = "Correct!"
        End If
    End If
End Sub

Private Sub OnTypingGuess(ByVal sender As Object, ByVal e As System.Windows.Controls.TextChangedEventArgs)
    VisualStateManager.GoToElementState(Me.LayoutRoot, "Guessing", True)
    Me.Result.Text = ""
End Sub

Uwagi

Wywołaj metodę GoToElementState , aby zmienić stany elementu spoza ControlTemplate elementu (na przykład w przypadku użycia elementu VisualStateManager w obiekcie DataTemplate lub Window). Wywołaj metodę, GoToState jeśli zmieniasz stany w kontrolce, która używa elementu VisualStateManager w pliku ControlTemplate.

Dotyczy