2010-11-07 2 views
1

Я создал средство просмотра изображений, которое обеспечивает увеличение/уменьшение изображения, а когда изображение увеличилось и было больше, чем у зрителя (вы не можете увидеть все изображение), я предоставил возможность перетаскивать изображение (like Windows Photo Viewer), используя «TranslateTransform», но я хочу, чтобы изображение прекратило перетаскивание, когда появилась граница (слева или справа или слева или вниз), я сделал некоторые вычисления ширины и высоты четвертых сторон и отлично работает но когда вы speedy перетащите изображение, которое оно остановит после это пропуск границы границы контейнера, а расстояние увеличено большей скоростью перетаскивания. Например:. Открыть изображение в «просмотра фотографий Windows» и Zoomed тогда таскать это точно остановится, когда вы достигнете его границы»Перетащите изображение в его родительскую границу?

Так что я хочу изображение, чтобы остановить, когда именно это граница появилась независимо от скорости сопротивления ?

Оценил ваш помогает, с наилучшими пожеланиями.

+0

Вы могли решить эту проблему? –

ответ

0

Это выглядит как проблема с вашим кодом. вы можете просто применить проверку диапазона, когда вы вычислять параметры для перевода преобразования, чтобы избежать перемещения картины за пределы региона?

+0

см. Мой код man ... – Saad

0

Это м y code У меня есть изображение (имя: imgView), сетка insode (имя: grdImage), я хочу, чтобы изображение (увеличенное изображение) перемещалось с перемещением мыши внутри сетки, и когда его границы достигают границы сетки до stop , точно так же, как "Windows Photo Viewer". 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

Смежные вопросы