2010-11-07 69 views
1

我已經創建了圖像查看器控件,可以提供圖像的放大/縮小功能,當圖像縮放並且比查看器大時(您無法看到所有圖像),我提供了拖動圖像的功能(類似於) Windows照片查看器)使用「TranslateTransform」,但我想圖像停止拖動時,它的邊界(左或右或左或下)出現,我已經做了一些計算的寬度和高度的第四方,它的工作正常但是當你迅速拖動它的圖像後,它停止它的邊界通過它的容器邊界,和距離增加更大的拖動速度。例如:打開「Windows照片查看器」的圖像,並放大它,然後拖動它,當你到達它的邊界」這是準停在其父邊框內拖動圖像?

所以我想圖像準停時,它的邊界出現,無論拖拽速度?

感謝你們的幫助, 問候。

+0

您能解決這個問題嗎? – 2011-07-08 22:14:11

回答

0

這看起來像你的代碼的問題。你能不能適用範圍檢查,當你計算的轉換參數轉換,以避免該地區以外的運動畫面?

+0

看到我的代碼人... – Saad 2010-11-12 10:35:45

0

這是某人y代碼我有圖像(名稱:imgView),insode網格(名稱:grdImage),我希望圖像(縮放圖像)隨着鼠標在網格內移動,以及當它的邊界到達網格邊界停止 ,完全像「Windows照片查看器」。 FYI:Im使用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` 
+0

既然您調用CaptureMouse,即使鼠標位於控件之外,控件也會收到鼠標消息。您必須驗證X和Y座標以確保您不會在區域外移動物體 – AlexEzh 2010-11-21 15:56:12