Compartir a través de


UIElement.ManipulationDelta Evento

Definición

Se produce cuando el dispositivo de entrada cambia de posición durante una manipulación.

public:
 event EventHandler<System::Windows::Input::ManipulationDeltaEventArgs ^> ^ ManipulationDelta;
public event EventHandler<System.Windows.Input.ManipulationDeltaEventArgs> ManipulationDelta;
member this.ManipulationDelta : EventHandler<System.Windows.Input.ManipulationDeltaEventArgs> 
Public Custom Event ManipulationDelta As EventHandler(Of ManipulationDeltaEventArgs) 

Tipo de evento

Ejemplos

En el ejemplo siguiente se muestra un controlador de eventos para el ManipulationDelta evento. En el ejemplo se usa la DeltaManipulation propiedad para mover, cambiar el tamaño y girar .Rectangle En el ejemplo también se comprueba si el evento se produjo durante la ManipulationDelta inercia y si el rectángulo está tocando el borde de una ventana. Si esos casos son true, la aplicación detiene la manipulación para evitar que el rectángulo salga del área visible de la aplicación. Este ejemplo forma parte de un ejemplo más grande en Walkthrough: Creating Your First Touch Application.

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;
}
Private Sub Window_ManipulationDelta(ByVal sender As Object, ByVal e As ManipulationDeltaEventArgs)

    ' Get the Rectangle and its RenderTransform matrix.
    Dim rectToMove As Rectangle = e.OriginalSource
    Dim rectTransform As MatrixTransform = rectToMove.RenderTransform
    Dim rectsMatrix As Matrix = rectTransform.Matrix


    ' Rotate the shape
    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 center
    rectsMatrix.Translate(e.DeltaManipulation.Translation.X,
                          e.DeltaManipulation.Translation.Y)

    ' Apply the changes to the Rectangle.
    rectTransform = New MatrixTransform(rectsMatrix)
    rectToMove.RenderTransform = rectTransform

    Dim container As FrameworkElement = e.ManipulationContainer
    Dim containingRect As New Rect(container.RenderSize)

    Dim shapeBounds As Rect = rectTransform.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 AndAlso Not containingRect.Contains(shapeBounds) Then
        e.Complete()
    End If

    e.Handled = True
End Sub

Comentarios

El ManipulationDelta evento se produce varias veces cuando el usuario arrastra los dedos sobre la pantalla durante una manipulación y otra vez cuando se produce la inercia. Puede usar la IsInertial propiedad para comprobar si el evento se está produciendo durante la inercia.

El elemento en con ManipulationDelta el evento no se ve afectado de ninguna manera cuando se produce el evento. Debe proporcionar la lógica al elemento que se va a manipular. Las CumulativeManipulation propiedades y DeltaManipulation , que son de tipo ManipulationDelta, contienen datos sobre cómo cambia la posición de las manipulaciones e interpretan como movimiento, cambio de tamaño o rotación de un objeto. Se aplica esa información al elemento que se va a manipular.

Para obtener más información sobre las manipulaciones, consulte Introducción a la entrada. Para obtener un ejemplo de una aplicación que responde a las manipulaciones, consulte Tutorial: Creación de la primera aplicación táctil.

Información sobre eventos enrutados

Campo identificador ManipulationDeltaEvent
Estrategia de enrutamiento Burbujeante
Delegado EventHandler<TEventArgs> de tipo ManipulationDeltaEventArgs.

Se aplica a