我创建了一个幸运绘制轮,可以在窗体加载时旋转,并在单击按钮时以加速和减速旋转。但是,我需要使用调度程序计时器(因为它是幸运抽奖权,我不应该设置修复持续时间。)点击时,它应该在持续时间之间旋转,当它停止时它将提示应该提取的奖品来自一个sqltable。 我目前拥有的代码是load事件和故事板。
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);
}
答案 0 :(得分:1)
假设XAML中有一个Ellipse元素
<Ellipse Width="200" Height="200" RenderTransformOrigin="0.5,0.5" ...>
<Ellipse.RenderTransform>
<RotateTransform x:Name="rotateTransform"/>
</Ellipse.RenderTransform>
</Ellipse>
你可以运行一个动画,例如随机旋转0到3600度之间的总角度,速度为每秒1000度:
var totalRotationAngle = rand.NextDouble() * 3600;
rotateTransform.BeginAnimation(RotateTransform.AngleProperty, new DoubleAnimation
{
By = totalRotationAngle,
Duration = TimeSpan.FromMilliseconds(totalRotationAngle)
});