VisualStateManager.GoToElementState(FrameworkElement, String, Boolean) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
要素を 2 つの状態の間で遷移させます。 このメソッドを使用して、コントロールによって定義された状態ではなく、アプリケーションによって定義された状態に遷移します。
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
パラメーター
- stateGroupsRoot
- FrameworkElement
VisualStateManager を含んでいるルート要素。
- stateName
- String
切り替え先の状態。
- useTransitions
- Boolean
VisualTransition オブジェクトを使用して状態を遷移させる場合は true
。それ以外の場合は false
。
戻り値
コントロールが新しい状態に正常に遷移した場合は true
。それ以外の場合は false
。
例外
例
次の例では、1 から 100 までの数値を推測するようにユーザーに求めるアプリケーションを作成します。 ユーザーが数値を入力すると、アプリケーションは、推測が高すぎるか低すぎるか、正しいかを示します。 次の XAML は、アプリケーションのユーザー インターフェイスを作成し、4 つの状態 TooLow
(、 TooHigh
、 Correct
、 Guessing
) を定義します。 アプリケーションが開始されると、その状態になります 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>
次のコードは、アプリケーションのロジックを示しています。 ユーザーが番号を入力してボタンをクリックすると、アプリケーションは を呼び出して 、 TooLow
に遷移するかCorrect
、 をTooHigh
呼び出GoToElementStateして、推測に関するフィードバックをユーザーに提供します。 この例を試すには、アプリケーションの開始時に 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
注釈
メソッドをGoToElementState呼び出して、 の外部にある要素のControlTemplate状態を変更します (たとえば、 または Windowで DataTemplate をVisualStateManager使用する場合)。 で をGoToState使用するコントロールの状態を変更する場合は、 メソッドをVisualStateManagerControlTemplate呼び出します。
適用対象
.NET