Condividi tramite


UIElement.CapturePointer(Pointer) Metodo

Definizione

Imposta l'acquisizione del puntatore su un UIElement. Dopo aver acquisito, solo l'elemento con acquisizione attiverà 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.

Restituisce

Boolean

bool

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

Esempio

In questo esempio viene illustrata la chiamata CapturePointer in base alla 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 tale puntatore è in uno stato premuto (Pointer.IsInContact deve essere true). Ciò che fisicamente costituisce la pressione varia in base al tipo di dispositivo puntatore (pulsante del mouse premuto, punto di tocco verso il basso, stilo in contatto). Se si tenta di acquisire un puntatore che non è premuto o se 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 acquisisci il puntatore perché vuoi che l'azione del puntatore corrente avvii un comportamento nell'app. In questo caso, in genere non si desidera che altri elementi gestisca altri eventi provenienti dalle azioni del puntatore, finché il comportamento non viene completato o annullato rilasciando l'acquisizione del puntatore. Se viene acquisito un puntatore, solo l'elemento con acquisizione 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 si sposta il puntatore da un elemento all'altro, si otterrà prima gli 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 sono interamente relativi al codice dell'app. Se l'utente rilascia il puntatore, che genera un evento PointerReleased e i puntatori associati a tale puntatore vengono persi. In questo modo si attiva 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 attiva anche un evento PointerCanceled . L'app può in genere basarsi sul comportamento di rilascio dell'acquisizione associato alle azioni di input utente, senza dover annullare in modo specifico un'acquisizione del puntatore con ReleasePointerCaptures o ReleasePointerCaptures. Per altre info, vedi Interazioni tramite mouse.

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

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

Gli eventi di input che rappresentano i movimenti (ad esempio Tapped o DoubleTapped) vengono in genere attivati 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 sarà consentito per avviare un'acquisizione del puntatore.

Suggerimento

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

Si applica a

Vedi anche