我想使用Visual Studios 2012为我的学校项目创建一个滚轮控件。 我现在拥有的是图像,当我点击一个按钮并停在随机位置时,它可以旋转。 但是,我不确定如何在图像停止旋转时检测位置。 这是旋转按钮事件,当我单击按钮时图像旋转。
private void SpinBtn_Click(object sender, RoutedEventArgs e)
{
var ease = new PowerEase { EasingMode = EasingMode.EaseOut };
Random rng = new Random(Guid.NewGuid().GetHashCode());
//DoubleAnimation(FromValue. ToValue, Duration)
DoubleAnimation myanimation = new DoubleAnimation
(0, rng.Next(360,720), new Duration(TimeSpan.FromSeconds(3)));
//Adding Power ease to the animation
myanimation.EasingFunction = ease;
RotateTransform rotate = new RotateTransform();
img.RenderTransform = rotate;
img.RenderTransformOrigin = new Point(0.5, 0.5);
rotate.BeginAnimation(RotateTransform.AngleProperty, myanimation);
}
一旦停止旋转,如何检测图像的位置(指针指向的位置)?因此,当指针指向该对象时,我可以将这些单词拖放到特定的文本框中。
请参阅image。
答案 0 :(得分:2)
你不需要知道图像(指针)指向的位置,只需计算旋转度。
double degree = rng.Next(360, 720);
DoubleAnimation myanimation = new DoubleAnimation
(0, degree, new Duration(TimeSpan.FromSeconds(3)));
double result_degree = degree % 360;
现在,您可以使用result_degree获取目标对象。
例如:
你有一个像时钟一样的圆圈中的12个物体,所以第一个物体的度数是0到29,第二个是30到59 ....
或者你可以设置对象'你自己的学位,第一是0到9,第二是10到39 ...
关于拖放:
我举一个简单的例子:
<Grid>
<TextBox x:Name="tbResult" HorizontalAlignment="Left" AllowDrop="True" Height="23" Margin="416,245,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/>
<TextBlock x:Name="tb1" HorizontalAlignment="Left" MouseLeftButtonDown="MyMouseLeftButtonDown" Margin="280,210,0,0" TextWrapping="Wrap" Text="ob1" VerticalAlignment="Top"/>
<TextBlock x:Name="tb2" IsEnabled="False" HorizontalAlignment="Left" MouseLeftButtonDown="MyMouseLeftButtonDown" Margin="280,245,0,0" TextWrapping="Wrap" Text="ob2" VerticalAlignment="Top"/>
<TextBlock x:Name="tb3" IsEnabled="False" HorizontalAlignment="Left" MouseLeftButtonDown="MyMouseLeftButtonDown" Margin="280,281,0,0" TextWrapping="Wrap" Text="ob3" VerticalAlignment="Top"/>
</Grid>
private void MyMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
TextBlock tb = sender as TextBlock ;
if(tb != null && tb.IsEnabled == true)
{
switch(tb.Name)
{
case "tb1" :
DragDrop.DoDragDrop(tb1, tb1.Text, DragDropEffects.Copy);
break;
case "tb2":
DragDrop.DoDragDrop(tb2, tb2.Text, DragDropEffects.Copy);
break;
case "tb3":
DragDrop.DoDragDrop(tb3, tb3.Text, DragDropEffects.Copy);
break;
}
}
}
当您获得result_degree并知道选择了哪个对象时,请设置IsEnable = true
和其他IsEnable = false
,设置TextBox&#39; s AllowDrop = true
。在此示例中,仅允许用户拖动ob1
。