Прочитать на английском

Поделиться через


UIElement.ManipulationDelta Событие

Определение

Происходит, когда устройство ввода меняет положение в процессе манипуляции.

C#
public event EventHandler<System.Windows.Input.ManipulationDeltaEventArgs> ManipulationDelta;

Тип события

Примеры

В следующем примере показан обработчик событий для ManipulationDelta события . В примере свойство используется DeltaManipulation для перемещения, изменения размера и поворота Rectangleобъекта . В примере также проверяется, произошло ли ManipulationDelta событие во время инерции и касается ли прямоугольник края окна. Если эти случаи верны, приложение останавливает манипуляцию, чтобы предотвратить выход прямоугольника из видимой области приложения. Этот пример является частью более крупного примера в разделе Пошаговое руководство. Создание первого сенсорного приложения.

C#
void Window_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
    
    // Get the Rectangle and its RenderTransform matrix.
    Rectangle rectToMove = e.OriginalSource as Rectangle;
    Matrix rectsMatrix = ((MatrixTransform)rectToMove.RenderTransform).Matrix;

    // Rotate the Rectangle.
    rectsMatrix.RotateAt(e.DeltaManipulation.Rotation, 
                         e.ManipulationOrigin.X, 
                         e.ManipulationOrigin.Y);

    // Resize the Rectangle.  Keep it square 
    // so use only the X value of Scale.
    rectsMatrix.ScaleAt(e.DeltaManipulation.Scale.X, 
                        e.DeltaManipulation.Scale.X, 
                        e.ManipulationOrigin.X,
                        e.ManipulationOrigin.Y);

    // Move the Rectangle.
    rectsMatrix.Translate(e.DeltaManipulation.Translation.X,
                          e.DeltaManipulation.Translation.Y);

    // Apply the changes to the Rectangle.
    rectToMove.RenderTransform = new MatrixTransform(rectsMatrix);

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

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

    // Check if the rectangle is completely in the window.
    // If it is not and intertia is occuring, stop the manipulation.
    if (e.IsInertial && !containingRect.Contains(shapeBounds))
    {
        e.Complete();
    }

    e.Handled = true;
}

Комментарии

Это ManipulationDelta событие возникает несколько раз, когда пользователь перетаскивает пальцы по экрану во время манипуляции и снова при возникновении инерции. Свойство можно использовать для IsInertial проверка, происходит ли событие во время инерции.

Элемент в с ManipulationDelta событием возникает никак не влияет при возникновении события. Необходимо предоставить логику для элемента, которым требуется манипулировать. CumulativeManipulation Свойства и DeltaManipulation , которые относятся к типу ManipulationDelta, содержат данные о том, как положение манипуляций изменяется и интерпретируется как перемещение, изменение размера или поворот объекта. Эти сведения применяются к элементу, которым требуется манипулировать.

Дополнительные сведения о манипуляциях см. в разделе Общие сведения о входных данных. Пример приложения, реагирующего на манипуляции, см. в разделе Пошаговое руководство. Создание первого сенсорного приложения.

Сведения о маршрутизируемом событии

Поле идентификатора ManipulationDeltaEvent
Стратегия маршрутизации Восходящей
Делегат EventHandler<TEventArgs> имеет тип данных ManipulationDeltaEventArgs.

Применяется к

Продукт Версии
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9