Erweitern Minimieren

UIElement.ReleasePointerCapture Method

Gibt Zeigeraufzeichnungen frei für die Aufzeichnung eines speziellen Zeiger mit diesem UIElement.

Syntax


public void ReleasePointerCapture(
  Pointer value
)

Parameter

value

Typ: Pointer

Der Zeigerverweis. Verwenden Sie entweder gespeicherte Verweise aus vorherigen Aufnahmen oder Zeigerereignisdaten, um diesen Verweis abzurufen.

Hinweise

Die programmgesteuerte Freigabe der Zeigererfassung mit ReleasePointerCapture ist nicht der einzige Weg, auf dem ein Element die Zeigererfassung verlieren kann. Beispielsweise können benutzergesteuerte Ereignisse wie Freigeben des Zeigers (Up-Fingereingabepunkt, Maustaste wurde losgelassen) bewirken, dass die Zeigererfassung abgebrochen wird. Sie können das PointerCaptureLost-Ereignis überwachen, um zu ermitteln, wann dies geschieht.

Eine andere Methode, die Zeigererfassung abzubrechen, ist, wenn ein Zeiger aus einer App heraus und in eine andere App hinein verschoben wird, wenn die zwei Apps parallel liegen.

Sie sollten ReleasePointerCapture nur aufrufen, wenn der App-Code zuvor CapturePointer aufgerufen hat und einen Verweis auf die bestimmte Pointer-Instanz enthält, in der Sie die Zeigererfassung aufheben möchten. Sie können in der Regel diesen Pointer-Verweis von einem Ereignis wie PointerReleased oder PointerMoved abrufen.

Ihr App-Code könnte CapturePointer aus einem anderen UIElement als dem mit der aktuellen Zeigererfassung aufrufen. Wenn ja, wird dadurch jede Zeigererfassung abgebrochen, die zuvor durch andere Elemente ausgeführt wird. Ein UIElement kann mehrere Zeiger erfassen, um mehrere Berührungspunkte, beispielsweise für Manipulationen, zu behandeln. Allerdings kann nur ein UIElement in einer App jederzeit über alle Zeigererfassungen verfügen. Weitere Informationen finden Sie unter Schnellstart: Zeiger.

Beispiele

Dieses Beispiel veranschaulicht das Aufrufen von ReleasePointerCapture auf Grundlage der Behandlung von PointerReleased. Dargestellt wird auch Code zur erstmaligen Zeigererfassung sowie ein Muster zur Nachverfolgung und Zählung von Zeigerverweisen.


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


Anforderungen

Mindestens unterstützter Client

Windows 8

Mindestens unterstützter Server

Windows Server 2012

Namespace

Windows.UI.Xaml
Windows::UI::Xaml [C++]

Metadaten

Windows.winmd

Siehe auch

CapturePointer
PointerReleased
UIElement
PointerCaptureLost
Eingabebeispiel

 

 

Anzeigen:
© 2014 Microsoft