WP7 TouchPanel Обработка жестов - PullRequest
1 голос
/ 28 марта 2012

У меня проблема с обработкой жестов.

В основном я делал это после этого урока:

http://www.nickharris.net/2010/11/using-touchpanel-for-gestures-in-windows-phone-7/

Это мой файл Remote.xaml:

 <UserControl x:Class="EnergyRadio.Remote"
 ....
 ManipulationCompleted="StackPanel_ManipulationCompleted">
      <Grid x:Name="LayoutRoot" Background="Transparent" >
      </Grid>
</UserControl>

А это Remote.xaml.cs:

 public Remote()
    {
        InitializeComponent();
        TouchPanel.EnabledGestures = GestureType.VerticalDrag | GestureType.HorizontalDrag;
    }

    private void StackPanel_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
    {
        //Check if touch Gesture is available  
        if (TouchPanel.IsGestureAvailable)
        {
            // Read the gesture so that you can handle the gesture type  
            GestureSample gesture = TouchPanel.ReadGesture();
            switch (gesture.GestureType)
            {
                case GestureType.VerticalDrag:
                    MessageBox.Show("vertikal");
                    break;
                case GestureType.HorizontalDrag:
                    MessageBox.Show("horizontal");
                    break;
                default:
                    //do something  
                    break;
            }
        }
    }

Неважно, как я проведу пальцем по телефону, он вернет меня в горизонтальное положение. Но это должно было стать первым шагом. Что мне действительно нужно, так это четыре направления ... это означает: вверх, вниз, вправо и влево.

Но я не могу найти этот тип жестов .. так у кого-нибудь есть идея?

это должно выглядеть так:

            switch (gesture.GestureType)
            {
                case "GesturType.Up":
                    MessageBox.Show("Volume Up");
                    break;
                case "GesturType.Down":
                    MessageBox.Show("Volume Down");
                    break;
                case "GesturType.Right":
                    MessageBox.Show("Next Channel");
                    break;
                case "GesturType.Left":
                    MessageBox.Show("Previous Channel");
                    break;
                default:
                    //do something  
                    break;
            }

Спасибо.

1 Ответ

2 голосов
/ 28 марта 2012

Я использую другой способ обработки жестов, а не способ XNA.вы можете попробовать GestureService.GestureListener

, например, вы хотите обнаружить событие перетаскивания внутри прямоугольника, вы делаете это

   <Rectangle x:Name="HelloRect">
      <toolkit:GestureService.GestureListener>
        <toolkit:GestureListener DragStarted="DragStarted_EventHandler"  DragCompleted="DragCompleted_EventHandler" />
      </toolkit:GestureService.GestureListener>
   </Rectangle>

Тогда в коде позади вы можете иметь обработчики событийжесты

private void DragStarted_EventHandler(object sender, DragStartedGestureEventArgs e)
{
    this.HelloRect.Fill = new SolidColorBrush(Colors.White);
}

private void DragCompleted_EventHandler(object sender, DragCompletedGestureEventArgs e)
{
    this.HelloRect.Fill = new SolidColorBrush(Colors.Black);
}

Обновление: этот урок хорош: http://windowsphonegeek.com/articles/WP7-GestureService-in-depth--key-concepts-and-API

Возможно, вы захотите проверить некоторые ссылки на то, что вы получите для параметров события: http://www.mindscapehq.com/Help/PhoneElements/html/2f4dc2f0-f612-6a89-092e-f65c243caded.htm и http://www.mindscapehq.com/Help/PhoneElements/html/96092851-e003-6423-389c-58d16281122b.htm

Существует также событие дельта-перетаскивания, которое вы можете посмотреть.Надеюсь, что это поможет в любом случае .. Я не очень знаком с сенсорной панелью .. извините за это .. вы можете подождать еще несколько ответов

От начала и конца перетаскивания координаты васможно определить направление перетаскивания

.. Я думаю, что вы смотрите на событие flick. Еще один хороший учебник

http://johnhforrest.com/2010/09/windows-phone-7-gestures/

Обновление СНОВА: FlickGestureEventArgs содержитСвойство direction типа System.Windows.Controls.Orientation http://msdn.microsoft.com/en-us/library/system.windows.controls.orientation.aspx

оттуда вы можете определить направление щелчка

private void Flick_EventHandler(object sender, FlickGestureEventArgs e)
{
    if (e.Direction == Orientation.Horizontal)
    {
        if (e.HorizontalVelocity < 0)
        {
            //Right flick
        }
        else
        {
            //Left flick
        }
    }
    else
    {
        if (e.VerticalVelocity < 0)
        {
            //Up flick
        }
        else
        {
            //Down flick
        }
    }
}

Удачи и спокойной ночи ..

Обновление:

Я только что видел, что вы не должны использовать регистры переключателей для перечисления GestureType ... это целочисленные типы

, список типов жестов см. В

http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.input.touch.gesturetype.aspx

...