Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
- PenDevice
- SimpleHapticsController
- KnownSimpleHapticsControllerWaveforms
- PenDeviceInterop (Windows App SDK)
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
}
Verwandte Artikel
Windows developer