DrawingCanvas工具,拖动图片,图片抖动问题

31 篇文章 1 订阅

界面布局代码如下

<Viewbox Name="viewBoxContainer" ClipToBounds="True">
                        <Grid Name="gridContainer" 
                                ManipulationStarting="image_ManipulationStarting"  
                                ManipulationDelta="image_ManipulationDelta"
                                ManipulationCompleted="image_ManipulationCompleted"  
                             >
                            <Image Name="imageBackground"  Source="Images/output.jpg" Stretch="None" IsManipulationEnabled="True"></Image>
                            <lib:DrawingCanvas x:Name="drawingCanvas" Background="#00000000"
                    Width="{Binding ElementName=imageBackground, Path=ActualWidth, Mode=OneWay}"
                    Height="{Binding ElementName=imageBackground, Path=ActualHeight, Mode=OneWay}"
                    MouseWheel="Canvas_MouseWheel"
                    MouseMove="Canvas_MouseMove"
                    MouseLeftButtonDown="Canvas_MouseLeftButtonDown"
			        MouseLeftButtonUp="Canvas_MouseLeftButtonUp"
                    MouseRightButtonDown="Canvas_MouseRightButtonDown"
                    MouseLeave="drawingCanvas_MouseLeave"
                                            
                    TouchDown="OnTouchDownHandler"  
                    TouchMove="OnTouchMoveHandler"
                    TouchUp="OnTouchUpHandler"
                    IsManipulationEnabled="True">
                            </lib:DrawingCanvas>
                        </Grid>
                    </Viewbox>

后台鼠标拖动图片移动代码如下

        private Point mousePosition ;

private void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            if (!m_Move) return;
            isMouseDown = true;
            //mousePosition = e.GetPosition(gridContainer);
//需要注意此处,获取ViewBox上的坐标,如果是获取Grid上的坐标,则会导致鼠标按下,悬停,图片抖动
            mousePosition = e.GetPosition(viewBoxContainer);
        }
        private void Canvas_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            isMouseDown = false;
        }
        private void Canvas_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
        {
            //var position = e.GetPosition(gridContainer);
//需要注意此处,获取ViewBox上的坐标,如果是获取Grid上的坐标,则会导致鼠标按下,悬停,图片抖动
            var position = e.GetPosition(viewBoxContainer);
            var pos = e.GetPosition(drawingCanvas);
            if (pos.X <= 20 || pos.X >= drawingCanvas.ActualWidth - 20 || pos.Y <= 20 || pos.Y >= drawingCanvas.ActualHeight - 20)
            {
                isMouseDown = false;
            }
            if (isMouseDown)
            {
                TranslateTransform translateTransform = transformGroup.Children[1] as TranslateTransform;
                translateTransform.X += position.X - mousePosition.X;
                translateTransform.Y += position.Y - mousePosition.Y;
                mousePosition = position;
            }
        }
        private void drawingCanvas_MouseLeave(object sender, MouseEventArgs e)
        {
            isMouseDown = false;
        }

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值