VisualStateManager.GoToElementState(FrameworkElement, String, Boolean) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
öğeyi iki durum arasında geçişler. Bir denetim tarafından tanımlandığı yerine bir uygulama tarafından tanımlanan durumları geçiş yapmak için bu yöntemi kullanın.
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
Parametreler
- stateGroupsRoot
- FrameworkElement
öğesini içeren VisualStateManagerkök öğesi.
- stateName
- String
Geçiş için durum.
- useTransitions
- Boolean
true
durumlar arasında geçiş yapmak için bir VisualTransition nesne kullanmak; aksi takdirde, false
.
Döndürülenler
true
denetim başarıyla yeni duruma geçirildiyse; aksi takdirde , false
.
Özel durumlar
Örnekler
Aşağıdaki örnek, kullanıcıdan 1 ile 100 arasında bir sayı tahmin etmelerini isteyen bir uygulama oluşturur. Kullanıcı bir sayı girdiğinde, uygulama tahminin çok yüksek, çok düşük veya doğru olup olmadığını gösterir. Aşağıdaki XAML, uygulama için kullanıcı arabirimini oluşturur ve 4 durumu tanımlar: TooLow
, TooHigh
, Correct
ve Guessing
. Uygulama başladığında, durumundadır Guessing
. .
<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>
Aşağıdaki kod, uygulamanın mantığını gösterir. Kullanıcı bir numara girip düğmeye tıkladığında, uygulama , TooLow
öğesine geçiş yapmak TooHigh
veya Correct
kullanıcıya tahmin hakkında geri bildirim sağlamak için öğesini çağırırGoToElementState. Bu örneği denemek için, uygulama başladığında yöntemini çağırın GenerateNumber
.
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
Açıklamalar
öğesinin GoToElementState dışındaki ControlTemplate bir öğedeki durumları değiştirmek için yöntemini çağırın (örneğin, veya içinde DataTemplateWindowkullanıyorsanızVisualStateManager). GoToState içinde kullanan bir denetimde VisualStateManager durumları değiştiriyorsanız yöntemini çağırınControlTemplate.