Ecco quello che ho trovato-
1) del cursore e dimensione - Entrambi questi campioni usano progetto Microsoft.Kinect.Toolkit.Controls che definisce i controlli personalizzati (KinectTileButton, KinectScrollViwer, KinectRegion etc.) utilizzati nella questi campioni L'immagine e la dimensione del cursore Kinect sono definite come una risorsa in Microsoft.Kinect.Toolkit.Controls -> Temi-> Generic.xaml. Cerca il seguente nel file -
<Style TargetType="{x:Type local:KinectCursor}">
È possibile modificare questo secondo le proprie necessità. Non è stato possibile trovare proprietà/hook esposti per controllarlo direttamente dall'interfaccia utente.
2) Evento di grip sul pulsante di affiancamento - Pulsante Kinect Supporta vari eventi che possono essere descritti e applicati sul vostro desiderio. visualizzare questa immagine Hand over button event in Kinect SDK 1.7
3) Cambia cursore a Grip sul pulsante Tile - progetto Microsoft.Kinect.Toolkit.Controls utilizza KinectCursorVisualizer.cs e KinectCursor.cs per rendere il cursore mano virtuale sull'interfaccia utente. Lo stato visivo Mano aperta/Grip è controllato tramite questa proprietà di dipendenza definita in KinectCursor.cs.
public static readonly DependencyProperty IsOpenProperty = DependencyProperty.Register(
"IsOpen",
typeof(bool),
typeof(KinectCursor),
new UIPropertyMetadata(true, (o, args) => ((KinectCursor)o).EnsureVisualState()));
Un rapido trovare tutti i riferimenti sulla proprietà IsOpen dice che l'unico luogo in cui si trova questa struttura si trova KinectCursorVisualizer.cs-> OnHandPointersUpdated metodo. Line-229
// Set open state
cursor.IsOpen = !pointer.IsInGripInteraction;
e questa proprietà pointer.IsInGripInteraction è fissato a KinectAdapter.cs Linea 678
handPointer.IsInGripInteraction = newIsInGripInteraction;
Se si guarda il codice appena al di sopra di questa linea troverete che questa proprietà è impostata su true solo se l'elemento di destinazione ha un QueryInteractionStatusHandler definita e nel set args.Handled, args. Proprietà IsInGripInteraction su true.
Poiché KinectScrollViewer ha definito questo gestore, si vede un'immagine dell'impugnatura.
private void InitializeKinectScrollViewer()
{
KinectRegion.AddHandPointerGotCaptureHandler(this, this.OnHandPointerCaptured);
KinectRegion.AddHandPointerLostCaptureHandler(this, this.OnHandPointerLostCapture);
KinectRegion.AddHandPointerEnterHandler(this, this.OnHandPointerEnter);
KinectRegion.AddHandPointerMoveHandler(this, this.OnHandPointerMove);
KinectRegion.AddHandPointerPressHandler(this, this.OnHandPointerPress);
KinectRegion.AddHandPointerGripHandler(this, this.OnHandPointerGrip);
KinectRegion.AddHandPointerGripReleaseHandler(this, this.OnHandPointerGripRelease);
//This is the QueryInteractionStatusHandler
KinectRegion.AddQueryInteractionStatusHandler(this, this.OnQueryInteractionStatus);
KinectRegion.SetIsGripTarget(this, true);
this.scrollMoveTimer.Tick += this.OnScrollMoveTimerTick;
this.scrollViewerInertiaScroller.SlowEnoughForSelectionChanged += this.OnSlowEnoughForSelectionChanged;
// Create KinectRegion binding
this.kinectRegionBinder = new KinectRegionBinder(this);
this.kinectRegionBinder.OnKinectRegionChanged += this.OnKinectRegionChanged;
}
ma KinectTileButton (estende KinectButtonBase) non ha questo gestore definito
private void InitializeKinectButtonBase()
{
KinectRegion.AddHandPointerPressHandler(this, this.OnHandPointerPress);
KinectRegion.AddHandPointerGotCaptureHandler(this, this.OnHandPointerCaptured);
KinectRegion.AddHandPointerPressReleaseHandler(this, this.OnHandPointerPressRelease);
KinectRegion.AddHandPointerLostCaptureHandler(this, this.OnHandPointerLostCapture);
KinectRegion.AddHandPointerEnterHandler(this, this.OnHandPointerEnter);
KinectRegion.AddHandPointerLeaveHandler(this, this.OnHandPointerLeave);
KinectRegion.SetIsPressTarget(this, true);
}
Come definire questo gestore? - Semplice da aggiungere alla tua interfaccia utente. Può essere aggiunto al costruttore
//Add the handler
KinectRegion.AddQueryInteractionStatusHandler(kinectButton, OnQuery);
Definire il gestore
//Variable to track GripInterationStatus
bool isGripinInteraction = false;
private void OnQuery(object sender, QueryInteractionStatusEventArgs handPointerEventArgs)
{
//If a grip detected change the cursor image to grip
if (handPointerEventArgs.HandPointer.HandEventType == HandEventType.Grip)
{
isGripinInteraction = true;
handPointerEventArgs.IsInGripInteraction = true;
}
//If Grip Release detected change the cursor image to open
else if (handPointerEventArgs.HandPointer.HandEventType == HandEventType.GripRelease)
{
isGripinInteraction = false;
handPointerEventArgs.IsInGripInteraction = false;
}
//If no change in state do not change the cursor
else if (handPointerEventArgs.HandPointer.HandEventType == HandEventType.None)
{
handPointerEventArgs.IsInGripInteraction = isGripinInteraction;
}
handPointerEventArgs.Handled = true;
}
Potrebbe essere necessario modificare questo secondo il vostro requisito. Happy Kinecting :)
Posso solo dire grazie davvero così tanto per questo. Mi hai salvato ore di tempo e forse la mia sanità mentale. Ho avuto bisogno di KinectRegion.SetIsGripTarget(), ma non ho potuto elaborare il passaggio successivo. Grazie ancora, funziona perfettamente; Vorrei poter sopravvivere 1000 volte ... –
Contento che ha funzionato per te. Grazie per le belle parole :) – Gaurav