UIElement.ManipulationDelta Händelse

Definition

Händelsen inträffar när indataenheten ändrar position under en manipulering.

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) 

Händelsetyp

Exempel

I följande exempel visas en händelsehanterare för ManipulationDelta händelsen. I exemplet används egenskapen DeltaManipulation för att flytta, ändra storlek på och rotera en Rectangle. Exemplet kontrollerar också om händelsen ManipulationDelta inträffade under trögheten och om rektangeln vidrör kanten av ett fönster. Om dessa fall är sanna stoppar programmet manipuleringen för att förhindra att rektangeln lämnar programmets synliga område. Det här exemplet är en del av ett större exempel i Genomgång: Skapa ditt First Touch-program.

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

Kommentarer

Händelsen ManipulationDelta inträffar flera gånger när användaren drar fingrarna över skärmen under en manipulering och igen när tröghet inträffar. Du kan använda IsInertial egenskapen för att kontrollera om händelsen inträffar under trögheten.

Elementet på med ManipulationDelta händelsen inträffar påverkas inte på något sätt när händelsen inträffar. Du måste ange logiken för det element som ska manipuleras. CumulativeManipulation Egenskaperna ochDeltaManipulation, som är av typen ManipulationDelta, innehåller data om hur manipuleringarnas position ändras och tolkas som att flytta, ändra storlek på eller rotera ett objekt. Du tillämpar den informationen på det element som ska manipuleras.

Mer information om manipuleringar finns i Översikt över indata. Ett exempel på ett program som svarar på manipulationer finns i Genomgång: Skapa ditt First Touch-program.

Information om dirigerad händelse

Objekt Value
Identifierarfält ManipulationDeltaEvent
Routningsstrategi Bubblande
Delegera EventHandler<TEventArgs> av typen ManipulationDeltaEventArgs.

Gäller för