Ich arbeite an einem einfachen Tic Tac Toe-Spiel in C# mit UWP.Machen Sie eine Schaltfläche haben verschiedene normale/Hover-Erscheinungen je nach Zustand
Ich möchte einige Effekte hinzufügen, so dass, wenn die Maus über eine Zelle schwebt, ein Geist des Symbols angezeigt wird. Aber wenn ein Symbol bereits dort platziert wurde, sollte das Symbol leicht verblassen.
Was wäre ein guter Weg, dies zu erreichen?
Beispiel der gewünschten Wirkungen:
Top Zentrum Symbol platziert, Maus nicht über.
Center ist Symbol platziert, Maus über.
Mitte rechts ist das Symbol nicht platziert, Maus über.
Andere Zellen sind Symbol nicht platziert, Maus nicht vorbei.
Derzeit habe ich ein Control als solche definiert:
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="NormalSolid" >
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="PlayerIcon">
<EasingDoubleKeyFrame KeyTime="0" Value="0.75"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="1"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="PointerOverSolid">
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="PlayerIcon">
<EasingDoubleKeyFrame KeyTime="0" Value="1"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="0.75"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Normal" >
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="PlayerIcon">
<EasingDoubleKeyFrame KeyTime="0" Value="0.25"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="PointerOver">
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="PlayerIcon">
<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="0.25"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
Dann wird geändert wie folgt:
private void GameButton_PointerExited(object sender, PointerRoutedEventArgs e)
{
GameButton button = sender as GameButton;
VisualStateManager.GoToState(button, "Normal" + (!this.ShapePlaced ? "" : "Solid"), true);
}
private void GameButton_PointerEntered(object sender, PointerRoutedEventArgs e)
{
GameButton button = sender as GameButton;
VisualStateManager.GoToState(button, "PointerOver" + (!this.ShapePlaced ? "" : "Solid"), true);
}
(Wo GameButton ist eine einfache Unterklasse Schaltfläche und PlayerIcon ist eine Form, die die gezeichnete Form darstellt)
Aber das führt zu Problemen mit Klick + Ziehen um die Tasten, sowie unzuverlässig. Wäre es möglich, die 2 Sätze von Zuständen (Form platziert vs nicht platziert) in verschiedenen VisualStateGroups zu platzieren und die "aktive" Gruppe abhängig vom aktuellen Status zu wechseln?
Im Wesentlichen brauche ich 2 Normal States, 2 PointerOver Staaten, und eine Möglichkeit, zwischen ihnen zu wechseln.
Hallo, danke, dass du dir die Zeit genommen hast zu antworten. Als ich im Internet nachgesehen habe, habe ich gesehen, dass Sie das tun können. Wie würdest du das aber in meinem Fall verwenden, weil ich im Grunde zwei verschiedene "Normal" - und "PointerOver" -Zustände benötige, die je nachdem, ob die Form platziert ist oder nicht, umgeschaltet werden können. Vielen Dank. – minerz029