Sprache

UIElement.ReleasePointerCapture(Pointer) Methode

Definition

Gibt Zeigererfassungen für die Erfassung eines bestimmten Zeigers durch dieses UIElement frei.

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)

Parameter

value
Pointer

Der Zeigerverweis. Verwenden Sie gespeicherte Verweise aus früheren Aufzeichnungen oder Zeigerereignisdaten, um diesen Verweis abzurufen.

Beispiele

Dieses Beispiel zeigt das Aufrufen ReleasePointerCapture basierend auf der Behandlung von PointerReleased.

Außerdem wird Code zum anfänglichen Erfassen des Zeigers sowie ein Muster zum Nachverfolgen und Zählen von Zeigerbezügen angezeigt.

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;
}

Hinweise

Die programmgesteuerte Freigabe der Zeigererfassung ist ReleasePointerCapture nicht die einzige Möglichkeit, mit der ein Element die Zeigererfassung verlieren kann. Beispielsweise können benutzergesteuerte Ereignisse wie das Loslassen des Zeigers (Touchpoint nach oben, Losgelassene Maustaste) dazu führen, dass die Zeigeraufnahme abgebrochen wird.

Sie können auf das PointerCaptureLost-Ereignislauschen, um zu bestimmen, wann dies geschieht.

Eine andere Möglichkeit, die Zeigeraufnahme abzubrechen, ist, wenn ein Zeiger aus einer App und in eine andere App wechselt, während die beiden Apps nebeneinander angeordnet sind.

Sie sollten nur aufrufen ReleasePointerCapture , wenn der App-Code zuvor CapturePointer aufgerufen hat und einen Verweis auf die bestimmte Zeigerinstanz aufweist, in der Sie die Zeigererfassung freigeben möchten. Normalerweise erhalten Sie diesen Pointer Verweis über ein Ereignis wie PointerReleased oder vielleicht PointerMoved.

Der App-Code ruft CapturePointer möglicherweise von einem anderen UIElement als dem Element auf, das über eine aktuelle Zeigeraufnahme verfügt. Wenn dies der Fall ist, werden alle Zeigererfassungen abgebrochen, die zuvor von anderen Elementen erstellt wurden.

Ein UIElementkann mehrere Zeiger erfassen, um mehrere Fingereingabepunkte zu verarbeiten, z. B. für Manipulationen, aber nur ein UIElement Element in einer App kann jederzeit Zeigeraufnahmen enthalten. Weitere Informationen finden Sie unter Behandeln von Zeigereingaben.

Gilt für:

Weitere Informationen