Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8685239
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 12, 20262026-06-12T22:30:52+00:00 2026-06-12T22:30:52+00:00

I have the following code: private Point initialpoint; private void ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e)

  • 0

I have the following code:

private Point initialpoint;

private void ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e)
{
    initialpoint = e.Position;
}

private void ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
    Point currentpoint = e.Position;
    if (currentpoint.X - initialpoint.X >= 100)
    {
        System.Diagnostics.Debug.WriteLine("Swipe Right");
        e.Complete();
    }
}

I can handle 1 finger swipe gesture very easily, but I want to handle 2, 3, 4 fingers swipe gestures also. Can anyone tell me how to do that?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-12T22:30:54+00:00Added an answer on June 12, 2026 at 10:30 pm

    According to this MSDN Forum Posting you will need to use pointer notifications. The documentation with working example code resides in the MSDN Library

    From last link:

    A pointer object represents a single, unique input “contact” (a PointerPoint) from an input device (such as a mouse, pen/stylus, single finger, or multiple fingers). The system creates a pointer when a contact is first detected and destroys it when the pointer leaves (departs) detection range or is canceled. In the case of multiple devices or multi-touch input, each contact is treated as a unique pointer.


    Just a caveat, I do not have a multitouch Windows 8 device to test this code on. So it has been tested in the Simuator with all of its limitations, and as mentioned in the above links Windows 8 doesn’t not have built in gesture support for detecting multiple fingers you have to use lower level functions.

    First of all I added two more dictionary’s to the above MSDN example code and two variable for your Swipe Threshold to the Class definitions.

    Dictionary<uint, Point> startLocation;
    Dictionary<uint, bool> pointSwiped;
    int swipeThresholdX = 100;
    int swipeThresholdY = 100;
    

    I then initialize the Dictionarys in the Form’s Constructor

    startLocation = new Dictionary<uint, Point>((int)SupportedContacts.Contacts);
    pointSwiped = new Dictionary<uint, bool>((int)SupportedContacts.Contacts);
    

    Then every place that the Original Dictionary was added to or had an item removed I did the same with the new Dictionary’s

    adding:

    startLocation[pt.PointerId] = pt.Position;
    pointSwiped[pt.PointerId] = false;
    

    removing:

    startLocation.Remove(pt.PointerId);
    pointSwiped.Remove(pt.PointerId);
    

    Then finally put them together in the PointerMovedEvent:

    private void targetContainer_PointerMoved(object sender, PointerRoutedEventArgs e)
    {
        Windows.UI.Input.PointerPoint currentPoint = e.GetCurrentPoint(targetContainer);
        if (currentPoint.IsInContact)
        {
            if (startLocation.ContainsKey(currentPoint.PointerId))
            {
                Point startPoint = startLocation[currentPoint.PointerId];
                if (Math.Abs(currentPoint.Position.X - startPoint.X) > swipeThresholdX) // I only did one Axis for testing
                {
                    pointSwiped[currentPoint.PointerId] = true;
                }
            }
        }
        updateInfoPop(e);
    }               
    

    Final Modified MSDN Example:

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using Windows.Foundation;
    using Windows.Foundation.Collections;
    using Windows.UI.Xaml;
    using Windows.UI.Xaml.Controls;
    using Windows.UI.Xaml.Controls.Primitives;
    using Windows.UI.Xaml.Data;
    using Windows.UI.Xaml.Input;
    using Windows.UI.Xaml.Media;
    using Windows.UI.Xaml.Navigation;
    
    // The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238
    
    namespace PointerInput
    {
        /// <summary>
        /// An empty page that can be used on its own or navigated to within a Frame.
        /// </summary>
        public sealed partial class MainPage : Page
        {
            Windows.Devices.Input.TouchCapabilities SupportedContacts = new Windows.Devices.Input.TouchCapabilities();
    
            uint numActiveContacts;
            Dictionary<uint, Windows.UI.Input.PointerPoint> contacts;
            Dictionary<uint, Point> startLocation;
            Dictionary<uint, bool> pointSwiped;
            int swipeThresholdX = 100;
            int swipeThresholdY = 100;
    
            public MainPage()
            {
                this.InitializeComponent();
                numActiveContacts = 0;
                contacts = new Dictionary<uint, Windows.UI.Input.PointerPoint>((int)SupportedContacts.Contacts);
                startLocation = new Dictionary<uint, Point>((int)SupportedContacts.Contacts);
                pointSwiped = new Dictionary<uint, bool>((int)SupportedContacts.Contacts);
                targetContainer.PointerPressed += new PointerEventHandler(targetContainer_PointerPressed);
                targetContainer.PointerEntered += new PointerEventHandler(targetContainer_PointerEntered);
                targetContainer.PointerReleased += new PointerEventHandler(targetContainer_PointerReleased);
                targetContainer.PointerExited += new PointerEventHandler(targetContainer_PointerExited);
                targetContainer.PointerCanceled += new PointerEventHandler(targetContainer_PointerCanceled);
                targetContainer.PointerCaptureLost += new PointerEventHandler(targetContainer_PointerCaptureLost);
                targetContainer.PointerMoved += new PointerEventHandler(targetContainer_PointerMoved);
            }
    
            // PointerPressed and PointerReleased events do not always occur in pairs. 
            // Your app should listen for and handle any event that might conclude a pointer down action 
            // (such as PointerExited, PointerCanceled, and PointerCaptureLost).
            void targetContainer_PointerPressed(object sender, PointerRoutedEventArgs e)
            {
                if (Convert.ToBoolean(SupportedContacts.TouchPresent) && (numActiveContacts > SupportedContacts.Contacts))
                {
                    // cannot support more contacts
                    eventLog.Text += "\nNumber of contacts exceeds the number supported by the device.";
                    return;
                }
    
                Windows.UI.Input.PointerPoint pt = e.GetCurrentPoint(targetContainer);
    
                // Update event sequence.
                eventLog.Text += "\nDown: " + pt.PointerId;
    
                // Change background color of target when pointer contact detected.
                targetContainer.Fill = new SolidColorBrush(Windows.UI.Colors.Green);
    
                // Check if pointer already exists (if enter occurred prior to down).
                if (contacts.ContainsKey(pt.PointerId))
                {
                    return;
                }
                contacts[pt.PointerId] = pt;
                startLocation[pt.PointerId] = pt.Position;
                pointSwiped[pt.PointerId] = false;
                ++numActiveContacts;
                e.Handled = true;
    
                // Display pointer details.
                createInfoPop(e);
            }
    
            private void targetContainer_PointerEntered(object sender, PointerRoutedEventArgs e)
            {
                Windows.UI.Input.PointerPoint pt = e.GetCurrentPoint(targetContainer);
    
                // Update event sequence.
                eventLog.Text += "\nOver: " + pt.PointerId;
    
                if (contacts.Count == 0)
                {
                    // Change background color of target when pointer contact detected.
                    targetContainer.Fill = new SolidColorBrush(Windows.UI.Colors.Blue);
                }
    
                // Check if pointer already exists (if enter occurred prior to down).
                if (contacts.ContainsKey(pt.PointerId))
                {
                    return;
                }
    
                // Push new pointer Id onto expando target pointers array.
                contacts[pt.PointerId] = pt;
                startLocation[pt.PointerId] = pt.Position;
                pointSwiped[pt.PointerId] = false;
                ++numActiveContacts;
                e.Handled = true;
    
                // Display pointer details.
                createInfoPop(e);
            }
    
            // Fires for for various reasons, including: 
            //    - User interactions
            //    - Programmatic caputre of another pointer
            //    - Captured pointer was deliberately released
            // PointerCaptureLost can fire instead of PointerReleased. 
            private void targetContainer_PointerCaptureLost(object sender, PointerRoutedEventArgs e)
            {
                Windows.UI.Input.PointerPoint pt = e.GetCurrentPoint(targetContainer);
    
                // Update event sequence.
                eventLog.Text += "\nPointer capture lost: " + pt.PointerId;
    
                if (contacts.ContainsKey(pt.PointerId))
                {
                    checkSwipe();
                    contacts[pt.PointerId] = null;
                    contacts.Remove(pt.PointerId);
                    startLocation.Remove(pt.PointerId);
                    if (pointSwiped.ContainsKey(pt.PointerId))
                        pointSwiped.Remove(pt.PointerId);
    
                    --numActiveContacts;
                }
    
                // Update the UI and pointer details.
                foreach (TextBlock tb in pointerInfo.Children)
                {
                    if (tb.Name == e.Pointer.PointerId.ToString())
                    {
                        pointerInfo.Children.Remove(tb);
                    }
                }
    
                if (contacts.Count == 0)
                {
                    targetContainer.Fill = new SolidColorBrush(Windows.UI.Colors.Black);
                }
    
                e.Handled = true;
            }
    
            // Fires for for various reasons, including: 
            //    - A touch contact is canceled by a pen coming into range of the surface.
            //    - The device doesn't report an active contact for more than 100ms.
            //    - The desktop is locked or the user logged off. 
            //    - The number of simultaneous contacts exceeded the number supported by the device.
            private void targetContainer_PointerCanceled(object sender, PointerRoutedEventArgs e)
            {
                Windows.UI.Input.PointerPoint pt = e.GetCurrentPoint(targetContainer);
    
                // Update event sequence.
                eventLog.Text += "\nPointer canceled: " + pt.PointerId;
    
                if (contacts.ContainsKey(pt.PointerId))
                {
                    checkSwipe();
                    contacts[pt.PointerId] = null;
                    contacts.Remove(pt.PointerId);
                    startLocation.Remove(pt.PointerId);
                    if (pointSwiped.ContainsKey(pt.PointerId))
                        pointSwiped.Remove(pt.PointerId);
    
                    --numActiveContacts;
                }
    
                // Update the UI and pointer details.
                foreach (TextBlock tb in pointerInfo.Children)
                {
                    if (tb.Name == e.Pointer.PointerId.ToString())
                    {
                        pointerInfo.Children.Remove(tb);
                    }
                }
    
                if (contacts.Count == 0)
                {
                    targetContainer.Fill = new SolidColorBrush(Windows.UI.Colors.Black);
                }
    
                e.Handled = true;
            }
    
            private void targetContainer_PointerExited(object sender, PointerRoutedEventArgs e)
            {
                Windows.UI.Input.PointerPoint pt = e.GetCurrentPoint(targetContainer);
    
                // Update event sequence.
                eventLog.Text += "\nPointer exited: " + pt.PointerId;
    
                if (contacts.ContainsKey(pt.PointerId))
                {
                    checkSwipe();
                    contacts[pt.PointerId] = null;
                    contacts.Remove(pt.PointerId);
                    startLocation.Remove(pt.PointerId);
                    if (pointSwiped.ContainsKey(pt.PointerId))
                        pointSwiped.Remove(pt.PointerId);
    
                    --numActiveContacts;
                }
    
                // Update the UI and pointer details.
                foreach (TextBlock tb in pointerInfo.Children)
                {
                    if (tb.Name == e.Pointer.PointerId.ToString())
                    {
                        pointerInfo.Children.Remove(tb);
                    }
                }
    
                if (contacts.Count == 0)
                {
                    targetContainer.Fill = new SolidColorBrush(Windows.UI.Colors.Gray);
    
                }
                e.Handled = true;
            }
    
            /// <summary>
            /// Invoked when this page is about to be displayed in a Frame.
            /// </summary>
            /// <param name="e">Event data that describes how this page was reached.  The Parameter
            /// property is typically used to configure the page.</param>
            protected override void OnNavigatedTo(NavigationEventArgs e)
            {
            }
    
            void targetContainer_PointerReleased(object sender, PointerRoutedEventArgs e)
            {
                foreach (TextBlock tb in pointerInfo.Children)
                {
                    if (tb.Name == e.Pointer.PointerId.ToString())
                    {
                        pointerInfo.Children.Remove(tb);
                    }
                }
    
                Windows.UI.Input.PointerPoint pt = e.GetCurrentPoint(targetContainer);
    
                // Update event sequence.
                eventLog.Text += "\nUp: " + pt.PointerId;
    
                // Change background color of target when pointer contact detected.
                targetContainer.Fill = new SolidColorBrush(Windows.UI.Colors.Red);
    
                if (contacts.ContainsKey(pt.PointerId))
                {
                    checkSwipe();
                    contacts[pt.PointerId] = null;
                    contacts.Remove(pt.PointerId);
                    startLocation.Remove(pt.PointerId);
                    if(pointSwiped.ContainsKey(pt.PointerId))
                        pointSwiped.Remove(pt.PointerId);
    
                    --numActiveContacts;
                }
                e.Handled = true;
            }
    
            private void targetContainer_PointerMoved(object sender, PointerRoutedEventArgs e)
            {
                Windows.UI.Input.PointerPoint currentPoint = e.GetCurrentPoint(targetContainer);
                if (currentPoint.IsInContact)
                {
                    if (startLocation.ContainsKey(currentPoint.PointerId))
                    {
                        Point startPoint = startLocation[currentPoint.PointerId];
                        if (Math.Abs(currentPoint.Position.X - startPoint.X) > swipeThresholdX) // I only did one Axis for testing
                        {
                            pointSwiped[currentPoint.PointerId] = true;
                        }
                    }
    
                }
                updateInfoPop(e);
            }
    
            int numberOfSwipedFingers()
            {
                int count = 0;
                foreach (var item in pointSwiped)
                {
                    if (item.Value) { count += 1; }
                }
                return count;
            }
    
            void checkSwipe()
            {
                int fingers = numberOfSwipedFingers();
                if (fingers > 1)
                {
                    eventLog.Text += "\nNumber of Swiped fingers = " + fingers;
                }
                else if (fingers == 1)
                {
                    eventLog.Text += "\nNumber of Swiped fingers = " + fingers;
                }
                if(fingers > 0)
                    pointSwiped.Clear();
            }            
    
            void createInfoPop(PointerRoutedEventArgs e)
            {
                Windows.UI.Input.PointerPoint currentPoint = e.GetCurrentPoint(targetContainer);
                TextBlock pointerDetails = new TextBlock();
                pointerDetails.Name = currentPoint.PointerId.ToString();
                pointerDetails.Foreground = new SolidColorBrush(Windows.UI.Colors.White);
                pointerInfo.Children.Add(pointerDetails);
                pointerDetails.Text = queryPointer(e);
            }
    
            void updateInfoPop(PointerRoutedEventArgs e)
            {
                foreach (TextBlock pointerDetails in pointerInfo.Children)
                {
                    if (pointerDetails.Name == e.Pointer.PointerId.ToString())
                    {
                        pointerDetails.Text = queryPointer(e);
                    }
                }
            }
    
            String queryPointer(PointerRoutedEventArgs e)
            {
                Windows.UI.Input.PointerPoint currentPoint = e.GetCurrentPoint(targetContainer);
                String details = "";
                switch (e.Pointer.PointerDeviceType)
                {
                    case Windows.Devices.Input.PointerDeviceType.Mouse:
                        details += "\nPointer type: mouse";
                        break;
                    case Windows.Devices.Input.PointerDeviceType.Pen:
                        details += "\nPointer type: pen";
                        if (e.Pointer.IsInContact)
                        {
                            details += "\nPressure: " + currentPoint.Properties.Pressure;
                            details += "\nrotation: " + currentPoint.Properties.Orientation;
                            details += "\nTilt X: " + currentPoint.Properties.XTilt;
                            details += "\nTilt Y: " + currentPoint.Properties.YTilt;
                            details += "\nBarrel button pressed: " + currentPoint.Properties.IsBarrelButtonPressed;
                        }
                        break;
                    case Windows.Devices.Input.PointerDeviceType.Touch:
                        details += "\nPointer type: touch";
                        details += "\nrotation: " + currentPoint.Properties.Orientation;
                        details += "\nTilt X: " + currentPoint.Properties.XTilt;
                        details += "\nTilt Y: " + currentPoint.Properties.YTilt;
                        break;
                    default:
                        details += "\nPointer type: n/a";
                        break;
                }
    
                GeneralTransform gt = targetContainer.TransformToVisual(page);
                Point screenPoint;
    
                screenPoint = gt.TransformPoint(new Point(currentPoint.Position.X, currentPoint.Position.Y));
                details += "\nPointer Id: " + currentPoint.PointerId.ToString() +
                    "\nPointer location (parent): " + currentPoint.Position.X + ", " + currentPoint.Position.Y +
                    "\nPointer location (screen): " + screenPoint.X + ", " + screenPoint.Y;
                return details;
            }
        }
    }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have the following code: private void _DoValidate(object sender, DoWorkEventArgs e) { this.BeginInvoke(new MethodInvoker(()
I have the following code: private void Package_ContactDown(object sender, ContactEventArgs e) { ScatterViewItem svi
i have the following code: Private Sub TxtPStof_KeyPress(ByVal sender As System.Object, ByVal e As
i have the following code Private Sub select_color_Click(ByVal sender As System.Object, ByVal e As
I have following code: private void ProcessQueue() { foreach (MessageQueueItem item in GetNextQueuedItem()) PerformAction(item);
I have the following code: private String foo; public void setFoo(String bar) { foo
I have the following code private Map<KEY, Object> values = new HashMap<KEY, Object>(); public
I have the following code: private void WatchFileForChanges() { if (fileInfo.Directory != null) {
I have the following code... public class Point { private double x; private double
I have the following code in C# // test.Program private static void Main() {

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.