Share via


UIElement.ReleasePointerCapture(Pointer) Metodo

Definizione

Rilascia le acquisizioni del puntatore per l'acquisizione di un puntatore specifico da questo UIElement.

public:
 virtual void ReleasePointerCapture(Pointer ^ value) = ReleasePointerCapture;
void ReleasePointerCapture(Pointer const& value);
public void ReleasePointerCapture(Pointer value);
function releasePointerCapture(value)
Public Sub ReleasePointerCapture (value As Pointer)

Parametri

value
Pointer

Riferimento del puntatore. Per ottenere questo riferimento, usare riferimenti salvati dalle acquisizioni precedenti o dai dati dell'evento del puntatore.

Esempio

Questo esempio mostra la chiamata ReleasePointerCapture basata sulla gestione di PointerReleased.

Mostra anche il codice per l'acquisizione iniziale del puntatore e 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

Il rilascio a livello di codice dell'acquisizione del puntatore con ReleasePointerCapture non è l'unico modo in cui un elemento potrebbe perdere l'acquisizione del puntatore. Ad esempio, gli eventi basati sull'utente, ad esempio il rilascio del puntatore (punto di tocco, pulsante del mouse rilasciato) possono causare l'annullamento dell'acquisizione del puntatore.

È possibile restare in ascolto dell'evento PointerCaptureLostper determinare quando si verifica questa situazione.

Un altro modo in cui l'acquisizione del puntatore potrebbe essere annullata è se un puntatore si sposta all'esterno di un'app e in un'altra app mentre le due app sono affiancate.

Devi chiamare ReleasePointerCapture solo se il codice dell'app ha precedentemente chiamato CapturePointer e ha un riferimento all'istanza del puntatore specifica in cui vuoi rilasciare l'acquisizione del puntatore. In genere si ottiene tale Pointer riferimento tramite un evento, ad esempio PointerReleased o pointerMoved.

Il codice dell'app potrebbe chiamare CapturePointer da un UIElement diverso da quello con qualsiasi acquisizione del puntatore corrente. In tal caso, annulla qualsiasi acquisizione del puntatore eseguita in precedenza da altri elementi.

Un UIElementpuò acquisire più puntatori per gestire più punti di tocco, ad esempio per le manipolazioni, ma solo uno UIElement in un'app può avere qualsiasi acquisizione puntatore in qualsiasi momento. Per altre info, vedi Gestire l'input del puntatore.

Si applica a

Vedi anche