UIElement.ManipulationDelta Olay

Tanım

Bir düzenleme sırasında giriş cihazının konumu değiştiğinde gerçekleşir.

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) 

Olay Türü

Örnekler

Aşağıdaki örnekte olay için bir olay işleyicisi gösterilmektedir ManipulationDelta . Örnek, bir Rectangleöğesini DeltaManipulation taşımak, yeniden boyutlandırmak ve döndürmek için özelliğini kullanır. Örnek ayrıca olayın eylemsizlik sırasında oluşup oluşmadığını ManipulationDelta ve dikdörtgenin bir pencerenin kenarına dokunup dokunmadığını denetler. Bu durumlar doğruysa, uygulama dikdörtgenin uygulamanın görünür alanından ayrılmasını önlemek için işlemeyi durdurur. Bu örnek, İzlenecek Yol: İlk Dokunmatik Uygulamanızı Oluşturma makalesindeki daha büyük bir örneğin parçasıdır.

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

Açıklamalar

Olay, ManipulationDelta kullanıcı bir düzenleme sırasında parmaklarını ekranın üzerine sürüklediğinde ve eylemsizlik oluştuğunda tekrar oluşur. Eylemin IsInertial eylemsizlik sırasında oluşup oluşmadığını denetlemek için özelliğini kullanabilirsiniz.

olay ile üzerindeki ManipulationDelta öğesi, olay gerçekleştiğinde hiçbir şekilde etkilenmez. Mantığını, işlenecek öğeye sağlamanız gerekir. CumulativeManipulation türünde ManipulationDeltaolan ve DeltaManipulation özellikleri, işlemelerin konumunun nasıl değiştiğine ve bir nesneyi taşıma, yeniden boyutlandırma veya döndürme olarak yorumlandığına ilişkin veriler içerir. Bu bilgileri, işlenecek öğeye uygularsınız.

İşlemeler hakkında daha fazla bilgi için bkz. Girişe Genel Bakış. İşlemelere yanıt veren bir uygulama örneği için bkz. İzlenecek Yol: İlk Dokunmatik Uygulamanızı Oluşturma.

Yönlendirilmiş Olay Bilgisi

Tanımlayıcı alanı ManipulationDeltaEvent
Yönlendirme stratejisi Köpürme
Temsilci EventHandler<TEventArgs>, ManipulationDeltaEventArgs türündedir.

Şunlara uygulanır