我已经创建了一个幸运抽奖轮,它能够在表单加载时旋转,并在单击按钮时以加速和减速旋转。但是,我需要使用dispatcher计时器(因为这是一个抽奖机会,所以我不应该设置固定的持续时间)。当被点击时,它应该在一个持续时间之间旋转,当它停止时,它将提示一个应该从sqltable中提取的奖品。我目前拥有的代码是用于加载事件和故事板的。
private void Grid_Loaded(object sender, RoutedEventArgs e)
{
myMediaElement.Play();
var da = new DoubleAnimation(0, 360, new Duration(TimeSpan.FromSeconds(6)));
var rt = new RotateTransform();
ellipse.RenderTransform = rt;
ellipse.RenderTransformOrigin = new Point(0.5, 0.5);
da.RepeatBehavior = RepeatBehavior.Forever;
rt.BeginAnimation(RotateTransform.AngleProperty, da);
}
<Button x:Name="Spin" Width="189" HorizontalAlignment="Left" Margin="593,717,0,38">
Spin
<Button.Triggers>
<EventTrigger RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard x:Name="Mystoryboard" Completed="Mystoryboardcompleted" FillBehavior="Stop">
<DoubleAnimation Storyboard.TargetName="ellipse"
Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)" AutoReverse="False"
AccelerationRatio="1" Duration="0:0:4" By="2000" />
<DoubleAnimation Storyboard.TargetName="ellipse"
Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)" AutoReverse="False"
DecelerationRatio="1" Duration="0:0:4" By="1200" />
<ColorAnimationUsingKeyFrames Storyboard.TargetName="ellipse1"
Duration="0:0:4"
Storyboard.TargetProperty="(Ellipse.Fill).(SolidColorBrush.Color)">
<ColorAnimationUsingKeyFrames.KeyFrames>
<DiscreteColorKeyFrame KeyTime="0:0:0" Value="White"/>
<DiscreteColorKeyFrame KeyTime="0:0:1" Value="Green"/>
<DiscreteColorKeyFrame KeyTime="0:0:2" Value="White"/>
<DiscreteColorKeyFrame KeyTime="0:0:3" Value="Green"/>
<DiscreteColorKeyFrame KeyTime="0:0:4" Value="Green"/>
</ColorAnimationUsingKeyFrames.KeyFrames>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>我已经为dispatcher timer实现了此代码,但是我想在dispatcher timer的持续时间内执行故事板操作。
private DispatcherTimer _timer = new DispatcherTimer();
private Random rand = new Random();
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
_timer.Interval = TimeSpan.FromSeconds(rand.Next(5, 10)); // From 5 s to 10 s
RenderTransformOrigin = new Point(0.5, 0.5);
DoubleAnimation da = new DoubleAnimation();
da.From = 0;
da.To = 360;
da.Duration = new Duration(TimeSpan.FromSeconds(0.5));
RotateTransform rt = new RotateTransform();
ellipse.RenderTransform = rt;
rt.BeginAnimation(RotateTransform.AngleProperty, da);
}发布于 2018-06-04 15:23:04
假设XAML中有一个Ellipse元素
<Ellipse Width="200" Height="200" RenderTransformOrigin="0.5,0.5" ...>
<Ellipse.RenderTransform>
<RotateTransform x:Name="rotateTransform"/>
</Ellipse.RenderTransform>
</Ellipse>例如,可以运行一个动画,该动画以每秒1000度的速度随机旋转0到3600度之间的总角度:
var totalRotationAngle = rand.NextDouble() * 3600;
rotateTransform.BeginAnimation(RotateTransform.AngleProperty, new DoubleAnimation
{
By = totalRotationAngle,
Duration = TimeSpan.FromMilliseconds(totalRotationAngle)
});https://stackoverflow.com/questions/50672562
复制相似问题