繁体   English   中英

C#WPF拖动控件

[英]C# WPF Dragging Controls

我可以移动Ellipse但是MouseCursorEllipse不匹配。 我要他们搭配。

XAML:

<Grid>
    <Canvas Name="canvas" MouseMove="CanvasMouseMove" MouseLeftButtonUp="CanvasMouseLeftButtonUp" MouseLeftButtonDown="CanvasMouseLeftButtonDown" >
        <Ellipse Name="ellispe" Canvas.Top="0" Canvas.Left="0" Fill="#FFF4F4F5" Height="100" Stroke="Black" VerticalAlignment="Top" Width="100" />
    </Canvas>
</Grid>

代码隐藏:

Point mousepoint;
    private void CanvasMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        if(canvas.CaptureMouse())
        {
            mousepoint = e.GetPosition(canvas);
        }
    }

    private void CanvasMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        canvas.ReleaseMouseCapture();
    }

    private void CanvasMouseMove(object sender, MouseEventArgs e)
    {
        if (e.LeftButton == MouseButtonState.Pressed)
        {
            var e_point = e.GetPosition(canvas);
            var offset = e_point - mousepoint;
            mousepoint = e_point;
            var elposition = e.GetPosition(ellispe);
            Canvas.SetLeft(ellispe, Canvas.GetLeft(ellispe) + offset.X );
            Canvas.SetTop(ellispe, Canvas.GetTop(ellispe) + offset.Y );
        }
    }
<Canvas x:Name="canvas" MouseMove="canvas_MouseMove_1">
    <Ellipse x:Name="ellipse" MouseLeftButtonDown="ellipse_MouseLeftButtonDown_1" MouseLeftButtonUp="ellipse_MouseLeftButtonUp_1"  Fill="#FFB63636" Width="100" Height="100" Canvas.Left="198" Canvas.Top="94" />
</Canvas>

        Point p = new Point();
        private void ellipse_MouseLeftButtonDown_1(object sender, MouseButtonEventArgs e)
        {
            ellipse.CaptureMouse();

            p.X = e.GetPosition(canvas).X - Canvas.GetLeft(ellipse);
            p.Y = e.GetPosition(canvas).Y - Canvas.GetTop(ellipse);

            Debug.WriteLine(p.X + " : " + p.Y);            
        }

        private void canvas_MouseMove_1(object sender, MouseEventArgs e)
        {
            if (e.LeftButton == MouseButtonState.Pressed)
            {
                var e_point = e.GetPosition(canvas);

                Debug.WriteLine(e_point.X + " : " + p.X);

                Canvas.SetLeft(ellipse, e_point.X - p.X);
                Canvas.SetTop(ellipse, e_point.Y - p.Y);
            }
        }

        private void ellipse_MouseLeftButtonUp_1(object sender, MouseButtonEventArgs e)
        {
            ellipse.ReleaseMouseCapture();
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM