Haptisches (taktiles) Stift-Feedback

Erfahren Sie, wie Sie haptisches Feedback von Stiftgeräten verwenden, um natürlichere und taktile Interaktionen in Ihrer Windows App SDK-App bereitzustellen.

Windows 11 führte haptisches Feedback für digitale Stifte ein, sodass Benutzer spüren können, wie ihr Stift mit der Benutzeroberfläche der App interagiert. Wenn Sie auf dieses Feature verweisen, wird haptisch in Entwickler-APIs und -Dokumentationen verwendet, während taktil der benutzerorientierte Name ist, der in Windows Einstellungen angezeigt wird.

Wichtige APIs

Haptische Feedbacktypen

Es stehen zwei Arten von haptischem Feedback zur Verfügung:

  • Freihandfeedback – Simuliert das Gefühl von Schreib- oder Zeichenwerkzeugen (Stift, Marker, Bleistift, Textmarker) durch kontinuierliche Vibrationen, während der Stift den Bildschirm berührt.
  • Interaktionsfeedback – Kurze taktile Signale für Benutzeraktionen, z. B. das Daraufzeigen auf eine Schaltfläche, das Klicken oder bestätigen einer abgeschlossenen Aktion.

Erkennen der Stifteingabe

Registrieren Sie sich für das PointerEntered Ereignis, und überprüfen Sie, ob der Zeigergerätetyp ein Stift ist:

private void InputObserver_PointerEntered(object sender, PointerRoutedEventArgs e)
{
    if (e.Pointer.PointerDeviceType != Microsoft.UI.Input.PointerDeviceType.Pen)
    {
        return;
    }

    // Pen detected — check for haptic support.
}

Das PenDevice im Windows App SDK abrufen

Verwenden Sie PenDeviceInterop in einer Windows App SDK App – eine Windows App SDK Interopklasse – zum Abrufen des WinRT-Objekts PenDevice von einem Zeigerpunkt. PenDevice, SimpleHapticsController und KnownSimpleHapticsControllerWaveforms sind WinRT-Typen aus den Namespaces Windows.Devices.Input und Windows.Devices.Haptics; nur der Interopaufruf selbst stammt aus dem Namespace Microsoft.UI.Input.Interop des Windows App SDKs:

using Microsoft.UI.Input.Interop;
using Windows.Devices.Haptics;
using Windows.Devices.Input;
using Windows.Foundation.Metadata;

private void InputObserver_PointerEntered(object sender, PointerRoutedEventArgs e)
{
    if (e.Pointer.PointerDeviceType != Microsoft.UI.Input.PointerDeviceType.Pen)
    {
        return;
    }

    var penDevice = PenDeviceInterop.FromPointerPoint(e.GetCurrentPoint(null));

    if (penDevice == null)
    {
        return; // Pen does not support advanced features.
    }

    // SimpleHapticsController requires Windows 11. Check for API presence
    // before accessing it so the app doesn't throw on Windows 10.
    if (!ApiInformation.IsPropertyPresent(
        "Windows.Devices.Input.PenDevice", "SimpleHapticsController"))
    {
        return; // Haptic feedback requires Windows 11.
    }

    var hapticsController = penDevice.SimpleHapticsController;
    if (hapticsController == null)
    {
        return; // Pen does not support haptic feedback.
    }

    // Configure haptic feedback (see examples below).
}

Hinweis

Verwenden Sie PenDevice.GetFromPointerId stattdessen in UWP-Apps. Die PenDeviceInterop Klasse ist spezifisch für die Windows App SDK.

Freihandwellenformen

Freihandwellenformen werden kontinuierlich wiedergegeben, während der Stift den Bildschirm berührt. Erforderliche Wellenformen werden garantiert von jedem haptischen Stift unterstützt.

Wellenform Description Erforderlich
InkContinuous Standardmäßiges Kugelschreibergefühl. Fallback für nicht unterstützte Wellenformen. Yes
BrushContinuous Pinseltool No
PencilContinuous Bleistifttool No
MarkerContinuous Marker-Werkzeug No
ChiselMarkerContinuous Keilspitzenmarker / Textmarker No
EraserContinuous Radierer No
GalaxyPenContinuous Spezialtinte (mehrfarbiger Pinsel) No

Interaktionswellenformen

Interaktionswellenformen bieten kurzes, direktes Feedback für UI-Aktionen.

Wellenform Description Erforderlich
Click Standardmäßiger kurzer Klick. Fallback für nicht unterstützte Interaktionen. Yes
Fehler Aktion fehlgeschlagen oder Fehler aufgetreten No
Hover Begann, den Mauszeiger über ein interaktives Element zu bewegen No
Tastenkombination Ein interaktives Element wurde betätigt. No
Release Ein interaktives Element wurde freigegeben. No
Success Aktion erfolgreich No
BuzzContinuous Kontinuierliches Brummen No
RumbleContinuous Kontinuierliches Rumpeln No

Haptisches Feedback senden

Durchlaufen Sie SupportedFeedback, um die gewünschte Wellenform zu finden, und rufen Sie dann SendHapticFeedback auf:

SimpleHapticsControllerFeedback currentWaveform = null;

// Try to use BrushContinuous, fall back to InkContinuous.
foreach (var waveform in hapticsController.SupportedFeedback)
{
    if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.BrushContinuous)
    {
        currentWaveform = waveform;
        break;
    }
}

if (currentWaveform == null)
{
    foreach (var waveform in hapticsController.SupportedFeedback)
    {
        if (waveform.Waveform == KnownSimpleHapticsControllerWaveforms.InkContinuous)
        {
            currentWaveform = waveform;
            break;
        }
    }
}

if (currentWaveform != null)
{
    hapticsController.SendHapticFeedback(currentWaveform);
}

Haptisches Feedback beenden

Beenden Sie haptisches Feedback immer, wenn der Zeiger das Element verlässt. Sich für PointerExited auf demselben Element registrieren:

private void Canvas_PointerExited(object sender, PointerRoutedEventArgs e)
{
    hapticsController?.StopFeedback();
}

Hinweis

Einige Stifte stoppen Haptik automatisch, wenn der Stift den Bildschirm verlässt. Allerdings führen nicht alle Stifte dies aus, also rufen Sie immer explizit auf StopFeedback .

Anpassen des haptischen Feedbacks

Einige Stifte unterstützen zusätzliche Anpassungen. Überprüfen Sie den Support, bevor Sie sie verwenden:

Eigentum Kompatibilität prüfen mit
Intensität IsIntensitySupported
Anzahl der Wiedergaben IsPlayCountSupported
Wiedergabedauer IsPlayDurationSupported
Pausenintervall der Wiedergabe IsReplayPauseIntervalSupported
if (hapticsController.IsIntensitySupported)
{
    hapticsController.SendHapticFeedback(currentWaveform, 0.75); // 75% intensity
}