VisualStateManager.GoToElementState(FrameworkElement, String, Boolean) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Faz a transição do elemento entre dois estados. Use esse método para fazer a transição de estados que são definidos por um aplicativo, em vez de definidos por um controle.
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
Parâmetros
- stateGroupsRoot
- FrameworkElement
Um elemento raiz que contém o VisualStateManager.
- stateName
- String
O estado para fazer a transição.
- useTransitions
- Boolean
true
para usar um objeto VisualTransition para fazer a transição entre estados, caso contrário, false
.
Retornos
true
se o controle fizer a transição para o novo estado com êxito, caso contrário, false
.
Exceções
Exemplos
O exemplo a seguir cria um aplicativo que solicita que o usuário adivinho um número entre 1 e 100. Quando o usuário insere um número, o aplicativo indica se o palpite é muito alto, muito baixo ou correto. O XAML a seguir cria a interface do usuário para o aplicativo e define 4 estados: TooLow
, , TooHigh
e Correct``Guessing
. Quando o aplicativo é iniciado, ele está no Guessing
estado. .
<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>
O código a seguir mostra a lógica do aplicativo. Quando o usuário insere um número e clica no botão, o aplicativo chama GoToElementState para fazer a transição TooHigh``TooLow
ou Correct
para fornecer comentários ao usuário sobre o palpite. Para experimentar este exemplo, chame o GenerateNumber
método quando o aplicativo for iniciado.
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
Comentários
Chame o GoToElementState método para alterar estados em um elemento fora de um ControlTemplate (por exemplo, se você usar um VisualStateManager em um DataTemplate ou Window). Chame o GoToState método se você estiver alterando estados em um controle que usa o VisualStateManager em seu ControlTemplate.