我创建了一个幸运的牵引轮,当加载表格时它可以旋转,单击按钮时可以加速和减速旋转。但是,我需要改用调度程序计时器(因为这是幸运的抽奖权,因此我不应该设置固定持续时间。)单击时,它应该在持续时间之间旋转,而当它停止时,系统会提示应提取的奖金从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);
}
最佳答案
假设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)
});
关于c# - 如何为幸运抽奖轮(C#,XAML)添加随机调度程序计时器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50672562/