2010-11-07 28 views
1

J'ai créé le contrôle de visionneuse d'image, qui permet de zoomer/dézoomer l'image, et lorsque l'image est agrandie et agrandie (vous ne pouvez pas voir toute l'image) J'ai fourni la possibilité de faire glisser l'image (comme Windows Photo Viewer) en utilisant "TranslateTransform" mais je veux que l'image arrête de glisser quand sa bordure (gauche ou droite ou gauche ou bas) est apparue, j'ai fait quelques calculs de la largeur et la hauteur des quatrièmes côtés mais quand vous accélérer faire glisser l'image, il s'arrête après c'est la frontière passer c'est la frontière du conteneur, et la distance a augmenté de plus grande vitesse de traînée. Par exemple:. Ouvrir une image dans « Visionneuse de photos Windows » et zoomé il glisser puis il est arrêter exactement quand vous atteignez c'est la frontière »Faites glisser l'image dans sa bordure parentale?

Je veux l'image pour arrêter exactement quand il est frontière COMPARU quelle que soit la vitesse de traînée ?

Apprécié votre Helps, Cordialement.

+0

Avez-vous réussi à résoudre ce problème? –

Répondre

0

Cela ressemble à un problème de votre code. Pouvez-vous appliquer simplement vérifier plage lorsque vous calculez les paramètres pour traduire transformer pour éviter l'image en mouvement en dehors de la région?

+0

voir mon code man ... – Saad

0

C'est un M J'ai l'image (nom: imgView), grille d'insode (nom: grdImage), je veux l'image (image agrandie) pour déplacer avec la souris se déplacer à l'intérieur de la grille, et quand ses frontières atteignent la limite de la grille stop , exactement comme "Windows Photo Viewer". FYI: Im zoom de l'image en utilisant l'échelleTransform:

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

Depuis que vous appelez CaptureMouse votre contrôle recevra des messages de la souris même lorsque la souris est en dehors du contrôle. Vous devez valider les coordonnées X et Y pour vous assurer que vous ne déplacez pas d'objet hors de la zone – AlexEzh