UIElement.CapturePointer(Pointer) Metodo

Definizione

Imposta l'acquisizione del puntatore su un oggetto UIElement. Dopo l'acquisizione, solo l'elemento che ha acquisito genera eventi correlati al puntatore.

public:
 virtual bool CapturePointer(Pointer ^ value) = CapturePointer;
bool CapturePointer(Pointer const& value);
public bool CapturePointer(Pointer value);
function capturePointer(value)
Public Function CapturePointer (value As Pointer) As Boolean

Parametri

value
Pointer

Riferimento all'oggetto puntatore.

Valori restituiti

Boolean

bool

true se l'oggetto ha l'acquisizione del puntatore; in caso contrario, false.

Esempio

Questo esempio mostra la chiamata CapturePointer basata sulla gestione di PointerPressed. Mostra anche un modello per il rilevamento e il conteggio dei riferimenti del puntatore.

int _pointerCount;

public Scenario2()
{
    this.InitializeComponent();
    bEnteredExited.PointerEntered += bEnteredExited_PointerEntered;
    bEnteredExited.PointerExited += bEnteredExited_PointerExited;
    bEnteredExited.PointerPressed += bEnteredExited_PointerPressed;
    bEnteredExited.PointerReleased += bEnteredExited_PointerReleased;
    bEnteredExited.PointerMoved += bEnteredExited_PointerMoved;

    // To code for multiple Pointers (that is, fingers), 
    // we track how many entered/exited.
    _pointerCount = 0;
}

private void bEnteredExited_PointerMoved(object sender, 
    PointerRoutedEventArgs e)
{
    Scenario2UpdateVisuals(sender as Border, "Moved");
}

private void bEnteredExited_PointerReleased(object sender, 
    PointerRoutedEventArgs e)
{
    ((Border)sender).ReleasePointerCapture(e.Pointer);
    txtCaptureStatus.Text = string.Empty;
}

//Can only get capture on PointerPressed (i.e. touch down, mouse click, pen press)
private void bEnteredExited_PointerPressed(object sender, 
    PointerRoutedEventArgs e)
{
    if (tbPointerCapture.IsOn)
    {
        bool _hasCapture = ((Border)sender).CapturePointer(e.Pointer);
        txtCaptureStatus.Text = "Got Capture: " + _hasCapture;
    }
}

private void bEnteredExited_PointerExited(object sender, 
    PointerRoutedEventArgs e)
{
    _pointerCount--;
    Scenario2UpdateVisuals(sender as Border, "Exited");
}

private void bEnteredExited_PointerEntered(object sender, 
    PointerRoutedEventArgs e)
{
    _pointerCount++;
    Scenario2UpdateVisuals(sender as Border, "Entered");
}

private void Scenario2UpdateVisuals(Border border, 
    String eventDescription)
{
    switch (eventDescription.ToLower())
    {
        case "exited":
            if (_pointerCount <= 0)
            {
                border.Background = new SolidColorBrush(Colors.Red);
                bEnteredExitedTextBlock.Text = eventDescription;
            }
            break;
        case "moved":
            RotateTransform rt = 
                (RotateTransform)bEnteredExitedTimer.RenderTransform;
            rt.Angle += 2;
            if (rt.Angle > 360) rt.Angle -= 360;
            break;
        default:
            border.Background = new SolidColorBrush(Colors.Green);
            bEnteredExitedTextBlock.Text = eventDescription;
            break;
    }
}

private void Scenario2Reset(object sender, RoutedEventArgs e)
{
    Scenario2Reset();
}

private void Scenario2Reset()
{
    bEnteredExited.Background = new SolidColorBrush(Colors.Green);
    bEnteredExitedTextBlock.Text = string.Empty;
}

Commenti

È possibile acquisire correttamente il puntatore solo se il puntatore si trova in uno stato premuto (Pointer.IsInContact deve essere true). Ciò che fisicamente costituisce la pressione varia in base al tipo di dispositivo del puntatore (pulsante del mouse premuto, tocco verso il basso, stilo in contatto). Se si tenta di acquisire un puntatore che non viene premuto o quando il puntatore è stato premuto in precedenza, ma ora viene rilasciato, CapturePointer restituisce false. Le acquisizioni esistenti non sono interessate da una CapturePointer chiamata che ha restituito false.

In genere si acquisisce il puntatore all'interno di un gestore eventi PointerPressed . L'istanza del puntatore ottenuta dai dati dell'evento PointerRoutedEventArgs del PointerPressed gestore è il valore che è necessario passare per il value parametro quando si chiama CapturePointer dall'interno del codice del gestore.

In genere si acquisisce il puntatore perché si vuole che l'azione del puntatore corrente avvii un comportamento nell'app. In questo caso in genere non si vuole che altri elementi gestisca altri eventi provenienti dalle azioni del puntatore, fino a quando il comportamento non viene completato o annullato rilasciando l'acquisizione del puntatore. Se viene acquisito un puntatore, solo l'elemento che ha acquisito ottiene gli eventi di input del puntatore e altri elementi non generano eventi anche se il puntatore si sposta nei limiti. Si consideri, ad esempio, un'interfaccia utente con due elementi adiacenti. In genere, se il puntatore è stato spostato da un elemento all'altro, si otterrà prima eventi PointerMoved dal primo elemento e quindi dal secondo elemento. Tuttavia, se il primo elemento ha acquisito il puntatore, il primo elemento continua a ricevere PointerMoved eventi anche se il puntatore acquisito lascia i limiti. Inoltre, il secondo elemento non genera eventi PointerEntered per un puntatore acquisito quando il puntatore acquisito lo immette.

Lo stato di acquisizione del puntatore e la generazione degli eventi correlati all'acquisizione del puntatore non è interamente fino al codice dell'app. Se l'utente rilascia il puntatore, che genera un evento PointerReleased e il puntatore acquisisce associati a tale puntatore vengono persi. Viene generato anche PointerCaptureLost sull'elemento di acquisizione originale.

Nella maggior parte dei casi l'acquisizione del puntatore verrà rilasciata automaticamente quando l'utente completa un'azione di input che rilascia l'acquisizione del puntatore precedente (sollevando un punto di tocco, rilasciando il pulsante sinistro del mouse, rimuovendo lo stilo dall'intervallo). Un'altra condizione che potrebbe rilasciare l'acquisizione è qualsiasi azione che genera anche un evento PointerCanceled . L'app può in genere basarsi sul comportamento di rilascio dell'acquisizione associato alle azioni di input dell'utente, senza dover annullare in modo specifico un'acquisizione del puntatore con ReleasePointerCaptures o ReleasePointerCaptures. Per altre info, vedi Interazioni del mouse.

Il CapturePointer metodo restituirà false se il puntatore è già stato acquisito.

Un UIElement può acquisire più di un punto di puntatore alla volta. Usare il value parametro per indicare l'istanza del puntatore da acquisire.

Gli eventi di input che rappresentano i movimenti (ad esempio Tapped o DoubleTapped) vengono in genere generati solo dopo il rilascio di un puntatore, quindi non è consigliabile tentare di acquisire un puntatore nei gestori eventi per gli eventi di movimento. Il riferimento puntatore nei dati dell'evento per gli eventi di movimento non potrà avviare un'acquisizione del puntatore.

Tip

Non provare a usare CapturePointer all'esterno dell'ambito dei gestori eventi di input pertinenti al puntatore. A meno che non si disponga di un puntatore a cui si è certi che sia associato a un puntatore a cui è consentito l'acquisizione del puntatore in quel momento, la chiamata di CapturePointer non avrà alcun effetto. Non esiste un modo pratico per generare un nuovo Pointer puntatore e chiamare CapturePointer usando il nuovo puntatore. È consigliabile usare solo i Pointer riferimenti che il sistema fornisce tramite i dati dell'evento degli eventi di input correlati al puntatore.

Si applica a

Vedi anche