Използване на събития от клас

Опитвам се да накарам функция да се извиква всеки път, когато възникне събитие. В класа KinectRegion има събитие, наречено HandPointerGrip: http://msdn.microsoft.com/en-us/library/microsoft.kinect.toolkit.controls.kinectregion.handpointergrip.aspx.

Виждам, че е декларирал събитието и ми се струва, че събитието вече е настроено да бъде извикано (HandPointerEventArgs)? Как да прикача функция към това събитие?

public Menu()
{
    KinectRegion.HandPointerGripEvent+=Hand_Gripped; // why doesn't this work? :(
}    

private void Hand_Gripped(object sender, HandPointerEvnetArgs e)
{
    MessageBox.Show("I work!"); // I wish this would work
}

Работих усилено по този проблем и ето нещо, което мисля, че ще свърши работа. Страх да го тествам. Научаване на много за маршрутизирани събития, делегати и събития.

namespace ...
{
    public delegate void HandPointerEventHandler(object sender, HandPointerEventArgs e);
    public partial class thePage : Page
    {
        public event HandPointerEventHandler HandGripped
        {
            add {this.AddHandler(KinectRegion.HandPointerGripEvent,value);}
            remove {this.RemoveHandler(KinectRegion.HandPointerGripEvent,vlaue);}
        }

        public thePage()
        {
            InitializeComponent();
            this.HandGripped += new HandPointerEventHandler(OnHandGripped);
        }

        protected virtual void OnHandGripped(object sender, HandPointerEventArgs e)
        {
            MessageBox.Show("hello"); //hopefully
        }
    }
}

person agorapax    schedule 17.07.2013    source източник


Отговори (2)


Първият блок от код трябва да работи добре. Предполагам, че HandPointerGripEvent е закачен добре, просто никога не се задейства.

Как настройвате своя KinectRegion? Актуализирате ли библиотеката за взаимодействие всеки кадър?

Може би това помага? Kinect SDK 1.7: Mapping Joint /Координати на курсора към разделителната способност на екрана

person gareththegeek    schedule 19.07.2013
comment
Получавам статично поле само за четене, което не може да бъде присвоено за първия блок от код и операторът += не може да бъде приложен към група System.Windows.RoutedEvent и метод. Току-що прибягнах до използването на AddHandPointer‹EventHandlers› като KinectRegion.AddHandPointerMoveHanlder(); Сега съм заседнал как да създам оператори за задействане за мишката. Например, когато ръката е натисната, искам мишката да щракне в текущата си точка (сякаш има физическо щракване). - person agorapax; 19.07.2013

KinectRegion.AddHandPointerGripHandler(this.Button1, this.Button1_Click);

Ето Button1 е:

< k:KinectTileButton x:Name="Button1" Height="150" Width="150" Content="Click"/ >

Пространствата от имена:

  • xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  • xmlns:k="http://schemas.microsoft.com/kinect/2013"

Button1_Click е самият метод, например:

private void Button1_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show("YOU GOT ME !!!");
}

Ако искате да добавите манипулатор за захващане за друг интерфейсен обект, просто направете:

KinectRegion.AddHandPointerGripHandler(< object name >, < method name >);

И така.

person Krasimir Kolev    schedule 27.03.2014