C#WPF拖动控件

C#WPF拖动控件,c#,wpf,C#,Wpf,我可以移动椭圆,但是鼠标指针和椭圆不匹配。 我希望他们匹配 XAML: <Grid> <Canvas Name="canvas" MouseMove="CanvasMouseMove" MouseLeftButtonUp="CanvasMouseLeftButtonUp" MouseLeftButtonDown="CanvasMouseLeftButtonDown" > <Ellipse Name="ellispe" Canvas.Top="

我可以移动
椭圆
,但是
鼠标指针
椭圆
不匹配。 我希望他们匹配

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();
        }