Чтобы использовать клавиатуру как музыкальную клавиатуру - нажмите клавишу для воспроизведения, отпустите клавишу для остановки воспроизведения. Приложение UWP, а целевая платформа - Windows 10 с обычной клавиатурой hw. Я пытаюсь сделать это с помощью события Key_down. Вот тестовый код XAML (страница пуста, и только код C#):Как получить событие Key_down без повторения?
using System;
using System.Diagnostics;
using Windows.UI.Core;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
namespace testKeyborad
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
Window.Current.CoreWindow.KeyDown += CoreWindow_KeyDown;
}
protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
Window.Current.CoreWindow.KeyDown -= CoreWindow_KeyDown;
}
private void CoreWindow_KeyDown(CoreWindow sender, KeyEventArgs args)
{
Debug.WriteLine($"CoreWindow_KeyDown: {args.VirtualKey} {args.KeyStatus.WasKeyDown} {DateTime.Now:mm:ss.ss}");
}
}
}
Когда я держу ключ, событие стрельбы неоднократно. Существует обходное решение с args.KeyStatus.WasKeyDown, которое является ложным в первом случае (это показано в коде), но это странный способ.
Можно ли получить только одно событие key_down?
Возможно, у меня был только флаг, который срабатывает при нажатии на него и просто обрабатывает все будущие запросы на события. затем снимите флажок, когда ключ поднимается. – Takarii
'args.KeyStatus.WasKeyDown' похоже на путь. Почему бы вам просто игнорировать любые события, которые имеют этот набор? –
Вы можете усложниться и отделить событие от нажатия клавиш, затем он не будет запускаться снова и повторно подключить его к клавиатуре или использовать любое другое запутанное предложение, которое вы получите :) Но похоже, что 'WasKeyDown' предназначен для достижения того, что вы ищете почему бы не использовать его? – Nope