Как проверить, перемещается ли изображение пальцем? (Манипуляция)

#c# #wpf

#c# #wpf

Вопрос:

Я уже работаю с манипуляциями над изображениями на холсте. Теперь мне нужно проверить, перемещается ли изображение на холсте с помощью пальцев. Как это сделать?

      void Window_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
        {            
            Image photoToMove = e.OriginalSource as Image;
            int photoIndex = photos.IndexOf(photoToMove);            

            System.Windows.Media.Matrix rectsMatrix = ((MatrixTransform)photoToMove.RenderTransform).Matrix;
            rectsMatrix.RotateAt(e.DeltaManipulation.Rotation,
                                 e.ManipulationOrigin.X,
                                 e.ManipulationOrigin.Y);
            rectsMatrix.ScaleAt(e.DeltaManipulation.Scale.X,
                                e.DeltaManipulation.Scale.X,
                                e.ManipulationOrigin.X,
                                e.ManipulationOrigin.Y);
            rectsMatrix.Translate(e.DeltaManipulation.Translation.X,
                                  e.DeltaManipulation.Translation.Y);
            MatrixTransform newImageMTransform = new MatrixTransform(rectsMatrix);
            photoToMove.RenderTransform = newImageMTransform;

            Rect containingRect =
                new Rect(((FrameworkElement)e.ManipulationContainer).RenderSize);

            Rect shapeBounds =
                photoToMove.RenderTransform.TransformBounds(
                    new Rect(photoToMove.RenderSize));

            if (e.IsInertial amp;amp; !containingRect.Contains(shapeBounds))
            {
                e.Complete();
            }

            if (e.DeltaManipulation.Translation.X > 0 || e.DeltaManipulation.Translation.Y > 0)
            {
                imageMoved = true;
            }
            else
            {
                imageMoved = false;
            }          

            e.Handled = true;

        }
  

На данный момент этот код всегда говорит мне «imageMoved == true».

Комментарии:

1. Вы имеете в виду, в отличие от перемещения с помощью мыши?

2. @Clemens при вводе мышью все работает нормально (OnMouseDown / Up / Move). Это приложение для планшетных устройств с сенсорным экраном. Мы проверяем длительное нажатие на изображение, и если палец нажат более одной секунды, мы показываем диалоговое окно (удалить изображение?). Но если пользователь нажимает на изображение пальцем и перемещается в течение длительного времени, нам не нужно показывать диалоговое окно удаления изображения. Вот почему нам нужно проверить, было ли изображение перемещено с помощью ввода пальцем или нет

3. Почему бы просто не проверить, превышает ли перемещение определенный порог, например if (e.DeltaManipulation.Translation.Length > 10) ...

4. Я попробую это сейчас, Клеменс

5. @Clemens Пока я не перемещаю изображение, это значение> 0, но когда я останавливаю палец, оно показывает 0. Итак, когда я останавливаюсь и иду на палец с экрана, (значение равно 0) Я вижу запрос на удаление изображения, потому что последняя манипуляция дает мне Length = 0: (