首页 文章

使用WPF进行方向盘转换

提问于
浏览
1

对于WPF而言,我是一名业余爱好者,我正在与我的男孩一起为他的Lego Mindstorms机器人 Build 一个用户界面 .

他让我用方向盘代替方向按钮,虽然我可以这样做,包括旋转变换,我不知道如何让鼠标向下/拖动事件的变换移动,相对于方向拖动 .

到目前为止我的XAML是这样的:

<Image x:Name="steering" HorizontalAlignment="Left" Height="146" Margin="253,67,0,0" 
           VerticalAlignment="Top" Width="146" Source="images/steering-wheel.png" RenderTransformOrigin="0.5,0.5">
        <Image.RenderTransform>
            <RotateTransform CenterX="0.5" CenterY="0.5" />
        </Image.RenderTransform>
        <Image.Triggers>
            <EventTrigger RoutedEvent="Loaded">
                <BeginStoryboard>
                    <Storyboard RepeatBehavior="Forever">
                        <DoubleAnimation Storyboard.TargetProperty="(Image.RenderTransform).(RotateTransform.Angle)"
                                         From="0" To="360" Duration="0:0:2" />
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Image.Triggers>
    </Image>

我所追求的是检测用户何时向左或向右“拖动”方向盘并相应地转换图像的旋转角度 . 我应该从哪里开始?

1 回答

  • 1

    我做了类似的事情

    您需要2个参考点来计算方向盘中心的旋转和鼠标的位置,如下所示

    private void Steering_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.LeftButton == MouseButtonState.Pressed)
        {
            var control = sender as Ellipse;
            var point = e.GetPosition(control);
            var centre = new Point(control.Width / 2, control.Height / 2);
            var vector = point  - centre
            Steering.Angle = (Math.Atan2(vector.X,vector.Y) * 180 / Math.PI);
            //note default behaviour of Atan2 is Angle 0 = East and Anti Clockwise is a positive angle, 
            //by swapping X and Y north is now 0 angle and clockwise is positive
        }
    }
    

    那么你只需要绑定旋转

    <Ellipse 
        MouseMove="Steering_MouseMove" >
        <Ellipse.RenderTransform>
            <RotateTransform Angle="{Binding Steering.Angle}" CenterX="0.5" CenterY="0.5"/>
        </Ellipse.RenderTransform>
    </Ellipse>
    

相关问题