UIElement.PointerPressed Ereignis

Definition

Tritt auf, wenn das Zeigergerät eine Press-Aktion innerhalb dieses Elements initiiert.

public:
 virtual event PointerEventHandler ^ PointerPressed;
// Register
event_token PointerPressed(PointerEventHandler const& handler) const;

// Revoke with event_token
void PointerPressed(event_token const* cookie) const;

// Revoke with event_revoker
UIElement::PointerPressed_revoker PointerPressed(auto_revoke_t, PointerEventHandler const& handler) const;
public event PointerEventHandler PointerPressed;
function onPointerPressed(eventArgs) { /* Your code */ }
uIElement.addEventListener("pointerpressed", onPointerPressed);
uIElement.removeEventListener("pointerpressed", onPointerPressed);
- or -
uIElement.onpointerpressed = onPointerPressed;
Public Custom Event PointerPressed As PointerEventHandler 
<uiElement PointerPressed="eventhandler"/>

Ereignistyp

Hinweise

Touch-, Maus- und Stift-/Eingabestiftinteraktionen werden empfangen, verarbeitet und als Zeigereingabe in der UWP-App verwaltet. Jede dieser Interaktionen kann ein PointerPressed-Ereignis erzeugen. Weitere Informationen finden Sie unter Verarbeiten von Zeigereingaben. Zeigerereignisse sind für Szenarien gedacht, in denen Sie an mehreren Zeigern und deren Beziehungen interessiert sind, oder wenn Sie Besonderheiten jedes Zeigers untersuchen, z. B. die genaue Koordinatenposition. Andernfalls könnten Sie die Behandlung von Gestenereignissen wie "Getippt" in Betracht ziehen.

Verwenden Sie einen Handler, der auf PointerEventHandler basiert, um dieses Ereignis zu behandeln.

Die Mauseingabe wird einem einzelnen Zeiger zugeordnet, der bei der ersten Ermittlung einer Mauseingabe zugewiesen wird. Durch das Klicken auf eine Maustaste (links, Mausrad oder rechts) wird über das PointerPressed-Ereignis eine zweite Zuordnung zwischen dem Zeiger und dieser Taste erstellt. Das PointerReleased-Ereignis wird nur ausgelöst, wenn dieselbe Maustaste losgelassen wird (dem Zeiger kann erst eine andere Taste zugeordnet werden, wenn dieses Ereignis abgeschlossen ist). Aufgrund dieser exklusiven Zuordnung werden Klicks auf andere Maustasten über das PointerMoved-Ereignis geleitet. Sie können den Zustand der Maustaste bei der Behandlung dieses Ereignisses testen, wie im folgenden Beispiel gezeigt.

private void Target_PointerMoved(object sender, PointerRoutedEventArgs e)
{
    Windows.UI.Xaml.Input.Pointer ptr = e.Pointer;

    // Multiple, simultaneous mouse button inputs are processed here.
    // Mouse input is associated with a single pointer assigned when 
    // mouse input is first detected. 
    // Clicking additional mouse buttons (left, wheel, or right) during 
    // the interaction creates secondary associations between those buttons 
    // and the pointer through the pointer pressed event. 
    // The pointer released event is fired only when the last mouse button 
    // associated with the interaction (not necessarily the initial button) 
    // is released. 
    // Because of this exclusive association, other mouse button clicks are 
    // routed through the pointer move event.          
    if (ptr.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Mouse)
    {
        // To get mouse state, we need extended pointer details.
        // We get the pointer info through the getCurrentPoint method
        // of the event argument. 
        Windows.UI.Input.PointerPoint ptrPt = e.GetCurrentPoint(Target);
        if (ptrPt.Properties.IsLeftButtonPressed)
        {
            eventLog.Text += "\nLeft button: " + ptrPt.PointerId;
        }
        if (ptrPt.Properties.IsMiddleButtonPressed)
        {
            eventLog.Text += "\nWheel button: " + ptrPt.PointerId;
        }
        if (ptrPt.Properties.IsRightButtonPressed)
        {
            eventLog.Text += "\nRight button: " + ptrPt.PointerId;
        }
    }

    // Prevent most handlers along the event route from handling the same event again.
    e.Handled = true;

    // Display pointer details.
    updateInfoPop(e);
}
private void Target_PointerMoved(object sender, PointerRoutedEventArgs e)
{
    Windows.UI.Xaml.Input.Pointer ptr = e.Pointer;

    // Multiple, simultaneous mouse button inputs are processed here.
    // Mouse input is associated with a single pointer assigned when 
    // mouse input is first detected. 
    // Clicking additional mouse buttons (left, wheel, or right) during 
    // the interaction creates secondary associations between those buttons 
    // and the pointer through the pointer pressed event. 
    // The pointer released event is fired only when the last mouse button 
    // associated with the interaction (not necessarily the initial button) 
    // is released. 
    // Because of this exclusive association, other mouse button clicks are 
    // routed through the pointer move event.          
    if (ptr.PointerDeviceType == Windows.Devices.Input.PointerDeviceType.Mouse)
    {
        // To get mouse state, we need extended pointer details.
        // We get the pointer info through the getCurrentPoint method
        // of the event argument. 
        Windows.UI.Input.PointerPoint ptrPt = e.GetCurrentPoint(Target);
        if (ptrPt.Properties.IsLeftButtonPressed)
        {
            eventLog.Text += "\nLeft button: " + ptrPt.PointerId;
        }
        if (ptrPt.Properties.IsMiddleButtonPressed)
        {
            eventLog.Text += "\nWheel button: " + ptrPt.PointerId;
        }
        if (ptrPt.Properties.IsRightButtonPressed)
        {
            eventLog.Text += "\nRight button: " + ptrPt.PointerId;
        }
    }

    // Prevent most handlers along the event route from handling the same event again.
    e.Handled = true;

    // Display pointer details.
    updateInfoPop(e);
}

Zeigerereignisse von einem Mauseingabegerät weisen im Allgemeinen dieselbe PointerId in den Ereignisdetails für die Lebensdauer der App auf.

PointerPressed ist ein Routingereignis. Weitere Informationen zum Konzept von Routingereignissen finden Sie unter Übersicht über Ereignisse und Routingereignisse.

Bei Toucheingabeaktionen und interaktionsspezifischen Ereignissen oder Manipulationsereignissen, die aus einer Toucheingabeaktion resultieren, muss ein Element bei Treffertests sichtbar sein, damit es der Ereignisquelle entsprechen und das der Aktion zugeordnete Ereignis auslösen kann. UIElement.Visibility muss Sichtbar sein. Andere Eigenschaften abgeleiteter Typen wirken sich ebenfalls auf die Sichtbarkeit von Treffertests aus. Weitere Informationen finden Sie unter Übersicht über Ereignisse und Routingereignisse.

PointerPressed unterstützt die Möglichkeit, Ereignishandler an die Route anzufügen, die aufgerufen wird, auch wenn die Ereignisdaten für das Ereignis als Verarbeitet gekennzeichnet sind. Weitere Informationen finden Sie unter AddHandler.

Bestimmte Windows-Runtime Steuerelemente verfügen möglicherweise über eine klassenbasierte Behandlung für das PointerPressed-Eingabeereignis. Wenn dies der Grund ist, verfügt das Steuerelement wahrscheinlich über eine Außerkraftsetzung für die OnPointerPressed-Methode. In der Regel wird das Ereignis vom Klassenhandler behandelt, und das PointerPressed-Ereignis wird nicht zur Behandlung von Benutzercodehandlern für dieses Steuerelement ausgelöst. Beispielsweise verfügt ButtonBase über eine Klassenbehandlung, die PointerPressed behandelt und stattdessen Click auslöst. Weitere Informationen zur Funktionsweise der klassenbasierten Behandlung von Ereignissen finden Sie unter Übersicht über Ereignisse und Routingereignisse.

Steuerelemente können auch über eine PointerDownThemeAnimation-Persönlichkeitsanimation verfügen, die unabhängig vom Ereignis ausgeführt wird.

Zeigererfassung

PointerPressed wird manchmal als initiierendes Ereignis verwendet, wenn der Zeiger erfasst wird, sodass weitere zeigerbezogene Ereignisse von einem bestimmten Element erfasst werden, solange der Zeiger unten bleibt. Um einen Zeiger zu erfassen, rufen Sie die CapturePointer-Methode für ein bestimmtes UI-Element auf, das die Erfassung verwalten soll. Dies erfolgt in der Regel in einem PointerPressed-Ereignishandler, und Sie rufen CapturePointer für den Absender des Ereignisses auf. Weitere Informationen dazu, wie Sie einen Zeiger erfassen und warum Sie dies möglicherweise tun möchten, finden Sie unter CapturePointer.

PointerPressed- und Gestenereignisse oder Manipulationsereignisse

Die Benutzeraktion, die zunächst ein PointerPressed-Ereignis auslöst, kann schließlich dazu führen, dass das Holding-Ereignis eine Hold-Geste darstellt, es sei denn, das Eingabegerät ist eine Maus. Wenn das Element, in dem PointerPressed auftritt, einen nicht standardmäßigen ManipulationMode-Wert aufweist, kann die Aktion auch zu verschiedenen Manipulationsereignissen wie ManipulationStarted führen. Weitere Informationen finden Sie im Abschnitt "Verwenden von Manipulationsereignissen" unter Verarbeiten von Zeigereingaben.

Wenn PointerPressed ausgelöst wird, werden Gestenereignisse wie Tapped noch nicht ausgelöst, da die anderen Gestenereignisse als Halten darauf warten, dass der Zeiger losgelassen wird, bevor ein Ereignis ausgelöst wird.

Als allgemeine Entwurfsregel für die Benutzerinteraktionen Ihrer App sollten Sie überprüfen, ob es steuerelementspezifische Ereignisse gibt, die Sie für eine Interaktion behandeln können, oder ob entsprechende Gestenereignisse vorhanden sind. Wenn ihr Steuerelement beispielsweise eine Schaltfläche ist, verfügt dieses Steuerelement über ein Click-Ereignis , das speziell für den Aufruf der Aktion der Schaltfläche durch den Benutzer vorgesehen ist. Oder wenn Ihr Element keine Schaltfläche ist, Aber Sie behandeln und ein Ereignis für die primäre Aktion eines Elements behandeln, würden Sie Tapped behandeln.

Gestenereignisse können speziell für einzelne Elemente deaktiviert werden, indem Eigenschaften wie IsTapEnabled festgelegt werden. Sie können die Gestenereignisse deaktivieren, wenn Sie Bearbeitungen verarbeiten, aber Sie müssen in der Regel keine Gestenereignisse deaktivieren, wenn Sie Zeigerereignisse behandeln. Zeigerereignisse können nicht ausdrücklich deaktiviert werden, aber Sie können sie nicht behandeln.

PointerPressed und PointerReleased

Andere Ereignisse anstelle von PointerReleased können am Ende der Aktion ausgelöst werden, z. B. PointerCanceled oder PointerCaptureLost. Verlassen Sie sich nicht auf PointerPressed- und PointerReleased-Ereignisse , die immer paarweise auftreten. Um ordnungsgemäß zu funktionieren, muss Ihre App auf alle Ereignisse lauschen und diese behandeln, die wahrscheinliche Schlussfolgerungen für die Press-Aktion darstellen. Einige der Gründe, warum Sie möglicherweise kein PointerReleased-Vorkommen erhalten, sind:

  • Unterschiede in der Handhabung von Touch- und Pressaktionen durch bestimmte Hardware
  • Programmgesteuerte Zeigererfassung aus einem anderen Zeiger
  • Benutzeraktionen, die die Beziehung des Anzeigebereichs ändern, z. B. Ändern der Auflösung oder Überwachungseinstellungen
  • Eingabeinteraktionen, z. B. ein Tablettstift, der dieselbe Oberfläche berührt wie eine vorherige Toucheingabeaktion

Gilt für:

Weitere Informationen