Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Lär dig hur du använder haptisk feedback från pennenheter för att ge mer naturliga och taktila interaktioner i din Windows App SDK app.
Windows 11 introducerat haptisk feedback för digitala pennor, så att användarna kan känna hur pennan interagerar med appens användargränssnitt. När du refererar till den här funktionen används haptic i utvecklar-API:er och dokumentation, medan taktil är det användarinriktade namnet som visas i Windows Inställningar.
Nyckel-API:er
- PenDevice
- SimpleHapticsController
- KnownSimpleHapticsControllerWaveforms
- PenDeviceInterop (Windows App SDK)
Haptiska feedbacktyper
Det finns två typer av haptisk feedback:
- Respons för penninmatning — Simulerar känslan av skriv- eller ritverktyg (penna, märkpenna, blyertspenna, överstrykningspenna) genom kontinuerliga vibrationer medan pennan vidrör skärmen.
- Interaktionsfeedback – Korta taktila signaler för användaråtgärder som att hovra över en knapp, klicka eller bekräfta en slutförd åtgärd.
Identifiera penningång
Registrera dig för PointerEntered händelsen och kontrollera om enhetstypen pekare är en penna:
private void InputObserver_PointerEntered(object sender, PointerRoutedEventArgs e)
{
if (e.Pointer.PointerDeviceType != Microsoft.UI.Input.PointerDeviceType.Pen)
{
return;
}
// Pen detected — check for haptic support.
}
Hämta PenDevice i Windows App SDK
I en Windows App SDK app använder du PenDeviceInterop – en Windows App SDK interop-klass – för att hämta WinRT-objektet PenDevice från en pekarpunkt.
PenDevice, SimpleHapticsController, och KnownSimpleHapticsControllerWaveforms är WinRT-typer från Windows.Devices.Input namnrymderna ochWindows.Devices.Haptics. Endast själva interop-anropet kommer från Windows App SDK namnområdeMicrosoft.UI.Input.Interop:
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).
}
Anmärkning
Använd i stället i UWP-appar PenDevice.GetFromPointerId . Klassen PenDeviceInterop är specifik för Windows App SDK.
Bläckning av vågformer
Vågformer för bläckinmatning spelas upp kontinuerligt medan pennan är i kontakt med skärmen. Nödvändiga vågformer stöds garanterat av alla haptiska pennor.
| Vågform | Description | Krävs |
|---|---|---|
| InkContinuous | Standardkänsla som kulspetspenna. Reservlösning för vågformer som inte stöds. | Yes |
| BrushContinuous | Penselverktyget | No |
| Kontinuerlig penna | Pennverktyget | No |
| Kontinuerlig markör | Markörverktyg | No |
| ChiselMarkerFortsätt | Mejselmarkör/överstrykningspenna | No |
| Kontinuerlig raderare | Suddgummi | No |
| GalaxyPenContinuous | Specialbläck (flerfärgad pensel) | No |
Interaktionsvågformer
Interaktionsvågformer ger kort, direkt feedback för användargränssnittsåtgärder.
| Vågform | Description | Krävs |
|---|---|---|
| Klicka | Standard med kort klickning. Reservlösning för interaktioner som inte stöds. | Yes |
| Error | Åtgärden misslyckades eller så uppstod ett fel | No |
| Hovra | Började hovra över ett interaktivt element | No |
| Tryck | Tryckte på ett interaktivt element | No |
| Lansering | Släppte ett interaktivt element | No |
| Success | Åtgärden lyckades | No |
| BuzzContinuous | Kontinuerligt surrande | No |
| RumbleContinuous | Kontinuerligt mullrande | No |
Skicka haptisk feedback
Iterera igenom SupportedFeedback för att hitta önskad vågform och anropa SendHapticFeedbacksedan :
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);
}
Stäng av haptisk återkoppling
Stoppa alltid haptisk feedback när pekaren avslutar elementet. Registrera PointerExited på samma element:
private void Canvas_PointerExited(object sender, PointerRoutedEventArgs e)
{
hapticsController?.StopFeedback();
}
Anmärkning
Vissa pennor stänger automatiskt av haptiken när pennan lämnar skärmen. Detta gäller dock inte alla pennor, så anropa alltid StopFeedback uttryckligen.
Anpassa haptisk feedback
Vissa pennor stöder ytterligare anpassningar. Kontrollera supporten innan du använder dem:
| Property | Kontrollera kompatibilitet med |
|---|---|
| Intensitet | IsIntensitySupported |
| Antal uppspelningar | IsPlayCountSupported |
| Uppspelningstid | IsPlayDurationSupported |
| Pausintervall för återuppspelning | IsReplayPauseIntervalSupported |
if (hapticsController.IsIntensitySupported)
{
hapticsController.SendHapticFeedback(currentWaveform, 0.75); // 75% intensity
}
Relaterade artiklar
Windows developer