我已经创建了一个幸运的抽奖轮,它能够在窗体加载时旋转,并在单击按钮时以加速和减速的方式旋转。但是,我需要改用调度计时器(因为这是幸运抽奖,我不应该设置固定的持续时间。)单击时,它应该在持续时间之间旋转,当它停止时,它将提示应该从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>
我已经为调度程序计时器实现了这段代码,但是我想在调度程序计时器的持续时间内执行脚本操作。
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);
}
1条答案
按热度按时间vuv7lop31#
假设xaml中有一个椭圆元素
您可以运行一个动画,例如以每秒1000度的速度随机旋转0到3600度的总Angular :