我创建了图像查看器控件,可以放大/缩小图像,当图像缩放并且比图像大时(你看不到所有图像)我提供了拖动图像的能力(< strong>喜欢Windows Photo Viewer )使用“TranslateTransform”但我希望图像在出现边框(左边或右边或左边或下边)时停止拖动,我已经做了一些宽度和高度的计算第四面并且它工作正常但是当你快速拖动图像时它会在它的边框通过它的容器边框之后停止,并且距离会增加更大的拖动速度。例如:在“ Windows照片查看器”中打开图像并对其进行缩放,然后拖动它,当它到达边框时,它会完全停止。“
因此,无论拖动速度如何,我都希望图像在边界出现时完全停止?
赞赏你的帮助, 最诚挚的问候。
答案 0 :(得分:0)
这看起来像你的代码有问题。您是否可以在计算转换变换的参数时应用范围检查,以避免在区域外移动图片?
答案 1 :(得分:0)
这是我的代码我有图像(名称:imgView),insode网格(名称:grdImage),我想图像(缩放图像)移动鼠标移动到网格内部,当它的边框到达边框网格到停止,与“Windows Photo Viewer”完全相同。仅供参考:我使用scaleTransform:
缩放图像Private Sub imgView_MouseLeftButtonDown(ByVal sender As Object, ByVal e As MouseButtonEventArgs)
_IsMouseCapture = True
imgView.CaptureMouse()
Dim tt = DirectCast(DirectCast(imgView.RenderTransform, TransformGroup).Children.First(Function(tr) TypeOf tr Is TranslateTransform), TranslateTransform)
start = e.GetPosition(grdImage)
origin = New Point(tt.X, tt.Y)
End Sub
Private Sub imgView_MouseLeftButtonUp(ByVal sender As Object, ByVal e As MouseButtonEventArgs)
_IsMouseCapture = False
imgView.ReleaseMouseCapture()
End Sub
Private Sub imgView_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs)
If (Not _IsMouseCapture) Then
Return
End If
Dim tt = DirectCast(DirectCast(imgView.RenderTransform, TransformGroup).Children.First(Function(tr) TypeOf tr Is TranslateTransform), TranslateTransform)
Dim vx As Double = start.X - e.GetSafePosition(grdImage).X
Dim vy As Double = start.Y - e.GetSafePosition(grdImage).Y
tt.Y = origin.Y - vy
tt.X = origin.X - vx
End Sub`