Share via


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 entweder gespeicherte Verweise aus vorherigen Aufzeichnungen oder Zeigerereignisdaten, um diesen Verweis abzurufen.

Beispiele

In diesem Beispiel wird das Aufrufen ReleasePointerCapture basierend auf der Behandlung von PointerReleased veranschaulicht.

Außerdem werden Code zum anfänglichen Erfassen des Zeigers und ein Muster zum Nachverfolgen und Zählen von Zeigerverweise 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

Das programmgesteuerte Freigeben der Zeigererfassung mit ReleasePointerCapture ist nicht die einzige Möglichkeit, dass ein Element die Zeigererfassung verliert. Benutzergesteuerte Ereignisse wie das Loslassen des Zeigers (Touchpoint nach oben, Maustaste freigegeben) können beispielsweise dazu führen, dass die Zeigererfassung abgebrochen wird.

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

Eine andere Möglichkeit, die Zeigererfassung abzubrechen, ist, wenn sich ein Zeiger aus einer App in eine andere App bewegt, während die beiden Apps nebeneinander stehen.

Sie sollten nur aufrufenReleasePointerCapture, wenn Ihr App-Code zuvor CapturePointer aufgerufen hat und einen Verweis auf die jeweilige Zeiger-instance enthält, in der Sie die Zeigererfassung freigeben möchten. In der Regel erhalten Sie diesen Pointer Verweis über ein Ereignis wie PointerReleased oder pointerMoved.

Ihr App-Code ruft CapturePointer möglicherweise von einem anderen UIElement aus auf als das, das über eine aktuelle Zeigererfassung verfügt. Wenn dies der Fall ist, wird jede Zeigererfassung abgebrochen, die zuvor von anderen Elementen vorgenommen wurde.

Ein UIElementkann mehrere Zeiger erfassen, um mehrere Touchpunkte zu verarbeiten, z. B. für Bearbeitungen, aber nur einer UIElement in einer App kann gleichzeitig Zeigererfassungen aufweisen. Weitere Informationen finden Sie unter Behandeln von Zeigereingaben.

Gilt für:

Weitere Informationen