我正在尝试使用 C# 和 XAML 制作一款简单的 Windows 应用商店游戏,其中包含四处移动的六角形瓷砖。这主要是为了帮助我学习 C# 和 XAML,因为我以前从未接触过图形甚至 UI 编码。
我有一个方法可以将单个六角形移动到目标坐标,但现在看它我意识到不可能一次做多个移动,这是绝对必要的。
我觉得在我的方法中一定有一些根本性的问题,多个对象在一个 Canvas 上移动不可能是一件不寻常的事情,不是吗?我问这个主要是希望有人能指出我哪里出错了。
//moves the hex hexName to coordinates x, y, over a specified duration.
public void slideHex(int x, int y, string hexName, Duration duration)
{
GameStoryboard.Stop();
Polygon hex = GameCanvas.FindName(hexName) as Polygon;
TranslateTransform slideTransform = new TranslateTransform();
slideTransform.X = hex.RenderTransformOrigin.X;
slideTransform.Y = hex.RenderTransformOrigin.Y;
hex.RenderTransform = slideTransform;
DoubleAnimation animX = new DoubleAnimation();
DoubleAnimation animY = new DoubleAnimation();
animX.Duration = duration;
animY.Duration = duration;
GameStoryboard.Duration = duration;
GameStoryboard.Children.Add(animX);
GameStoryboard.Children.Add(animY);
Storyboard.SetTarget(animX, slideTransform);
Storyboard.SetTarget(animY, slideTransform);
Storyboard.SetTargetProperty(animX, "X");
Storyboard.SetTargetProperty(animY, "Y");
animX.To = x;
animY.To = y;
GameStoryboard.Begin();
}
最佳答案
Storyboard可以包含多个动画,每个动画可以针对不同的 UI 元素。这是一个 Storyboard 的示例,它“脉冲”三个不同控件的边框颜色:
<Storyboard x:Name="pulseAnimation" AutoReverse="True">
<ColorAnimation x:Name="animateLatitudeTextBoxBorderColour" Storyboard.TargetName="textBoxLatitude" From="{StaticResource PhoneTextBoxColor}" To="Green" Storyboard.TargetProperty="(TextBox.BorderBrush).(SolidColorBrush.Color)" Duration="0:0:0.4" />
<ColorAnimation x:Name="animateLongitudeTextBoxBorderColour" Storyboard.TargetName="textBoxLongitude" From="{StaticResource PhoneTextBoxColor}" To="Green" Storyboard.TargetProperty="(TextBox.BorderBrush).(SolidColorBrush.Color)" Duration="0:0:0.4" />
<ColorAnimation x:Name="animateHyperlinkTextColour" Storyboard.TargetName="hyperlinkButtonCurrentLocation" From="{StaticResource PhoneForegroundColor}" To="Green" Storyboard.TargetProperty="(HyperlinkButton.Foreground).(SolidColorBrush.Color)" Duration="0:0:0.4" />
</Storyboard>
您的代码看起来不错 - 您已经为 slideTransform
的多个属性设置了动画,并且由于动画的目标是动画的属性而不是 Storyboard,所以您没有理由不能'不要将 animX
或 animY
重新定位到完全不同的对象。
关于c# - 如何在 C#/XAML 中的单个 Storyboard中制作多个动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12293269/