This topic has not yet been rated - Rate this topic

ManipulationDeltaEventArgs.ReportBoundaryFeedback Method

Specifies that the manipulation has gone beyond certain boundaries.

Namespace:  System.Windows.Input
Assembly:  PresentationCore (in PresentationCore.dll)
'Declaration
Public Sub ReportBoundaryFeedback ( _
	unusedManipulation As ManipulationDelta _
)

Parameters

unusedManipulation
Type: System.Windows.Input.ManipulationDelta

The portion of the manipulation that represents moving beyond the boundary.

ExceptionCondition
ArgumentNullException

unusedManipulation is Nothing.

Use the ReportBoundaryFeedback method to indicate that an element has moved beyond a certain boundary. For example, if a user moves an element outside of the bounds of a Window, you can call this method to report that to the window. When you call ReportBoundaryFeedback, the ManipulationBoundaryFeedback event occurs. By default, the Window subscribes to the ManipulationBoundaryFeedback event to provide visual feedback to the user that a boundary has been reached. You can subscribe to ManipulationBoundaryFeedback to implement custom behavior.

The following example shows an event handler for the ManipulationDelta event that calls the ReportBoundaryFeedback method when the user moves the element over the edge of its container. To test this example, follow the steps in Walkthrough: Creating Your First Touch Application and replace the code in step 5 with this code.

Private Sub Window_ManipulationDelta(ByVal sender As Object, ByVal e As ManipulationDeltaEventArgs)

    Dim rectToMove As Rectangle = TryCast(e.OriginalSource, Rectangle)
    Dim overshoot As Vector

    ' When the element crosses the boundary of the window, check whether 
    ' the manipulation is in inertia. If it is, complete the manipulation.
    ' Otherwise, report the boundary feedback.
    If CalculateOvershoot(rectToMove, e.ManipulationContainer, overshoot) Then
        If e.IsInertial Then
            e.Complete()
            e.Handled = True
            Exit Sub
        Else
            'Report that the element hit the boundary

            e.ReportBoundaryFeedback(New ManipulationDelta(overshoot, 0, New Vector(), New Vector()))
        End If
    End If

    ' Move the element as usual.

    ' Get the Rectangle and its RenderTransform matrix.
    Dim rectsMatrix As Matrix = DirectCast(rectToMove.RenderTransform, MatrixTransform).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)

    e.Handled = True
End Sub

Private Function CalculateOvershoot(ByVal element As UIElement, ByVal container As IInputElement, ByRef overshoot As Vector) As Boolean
    ' Get axis aligned element bounds
    Dim elementBounds = element.RenderTransform.TransformBounds(VisualTreeHelper.GetDrawing(element).Bounds)

    'double extraX = 0.0, extraY = 0.0;
    overshoot = New Vector()

    Dim parent As FrameworkElement = TryCast(container, FrameworkElement)
    If parent Is Nothing Then
        Return False
    End If

    ' Calculate overshoot. 
    If elementBounds.Left < 0 Then
        overshoot.X = elementBounds.Left
    ElseIf elementBounds.Right > parent.ActualWidth Then
        overshoot.X = elementBounds.Right - parent.ActualWidth
    End If

    If elementBounds.Top < 0 Then
        overshoot.Y = elementBounds.Top
    ElseIf elementBounds.Bottom > parent.ActualHeight Then
        overshoot.Y = elementBounds.Bottom - parent.ActualHeight
    End If

    ' Return false if Overshoot is empty; otherwsie, return true.
    Return Not Vector.Equals(overshoot, New Vector())
End Function

.NET Framework

Supported in: 4.5.1, 4.5, 4

.NET Framework Client Profile

Supported in: 4

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Did you find this helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2014 Microsoft. All rights reserved.