Partage via


UIElement.ManipulationDelta Événement

Définition

Se produit lorsque le périphérique d'entrée change de position pendant une manipulation.

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) 

Type d'événement

Exemples

L’exemple suivant montre un gestionnaire d’événements pour l’événement ManipulationDelta . L’exemple utilise la DeltaManipulation propriété pour déplacer, redimensionner et faire pivoter un Rectangle. L’exemple vérifie également si l’événement ManipulationDelta s’est produit pendant l’inertie et si le rectangle touche le bord d’une fenêtre. Si ces cas sont vrais, l’application arrête la manipulation pour empêcher le rectangle de quitter la zone visible de l’application. Cet exemple fait partie d’un exemple plus large dans Procédure pas à pas : création de votre application first touch.

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

Remarques

L’événement ManipulationDelta se produit plusieurs fois lorsque l’utilisateur fait glisser des doigts sur l’écran pendant une manipulation et à nouveau quand l’inertie se produit. Vous pouvez utiliser la IsInertial propriété pour case activée si l’événement se produit pendant l’inertie.

L’élément activé avec ManipulationDelta l’événement se produit n’est en aucun cas affecté lorsque l’événement se produit. Vous devez fournir la logique à l’élément qui doit être manipulé. Les CumulativeManipulation propriétés et DeltaManipulation , qui sont de type ManipulationDelta, contiennent des données sur la façon dont la position des manipulations change et interprétée comme le déplacement, le redimensionnement ou la rotation d’un objet. Vous appliquez ces informations à l’élément à manipuler.

Pour plus d’informations sur les manipulations, consultez Vue d’ensemble des entrées. Pour obtenir un exemple d’application qui répond aux manipulations, consultez Procédure pas à pas : création de votre première application tactile.

Informations sur les événements acheminés

Champ Identificateur ManipulationDeltaEvent
Stratégie de routage Bouillonnant
Délégué EventHandler<TEventArgs> de type ManipulationDeltaEventArgs.

S’applique à