どのコントロールにフォーカスがあるかに関係なく、キーボードショートカットをキャプチャするにはどうすればよいですか?私は、ユーザーが焦点を当てることができる可能性のあるコントロールごとに同じことを書きたくありません。では、ページ全体/コントロールに依存しないショートカットをどのように監視できますか?
質問する
1141 次
3 に答える
4
このコードをコンストラクターに追加すると、グローバルキーダウンとキーが処理されます
Window.Current.CoreWindow.KeyDown += CoreWindow_KeyDown;
Window.Current.CoreWindow.KeyUp += CoreWindow_KeyUp;
ここに彼らのイベントがあります
void CoreWindow_KeyUp(Windows.UI.Core.CoreWindow sender, Windows.UI.Core.KeyEventArgs args)
{
//this.Frame.Navigate(typeof(MainPage));
var key = args.VirtualKey;
string aa = args.ToString();
}
void CoreWindow_KeyDown(Windows.UI.Core.CoreWindow sender, Windows.UI.Core.KeyEventArgs args)
{
//this.Frame.Navigate(typeof(MainPage));
var key = args.VirtualKey;
string aa = args.ToString();
}
このイベント内で独自のロジックを作成できます。
于 2013-02-07T13:46:40.143 に答える
1
ルート要素にイベントハンドラーを設定するのはどうですか?他の場所で処理されない場合、イベントは最終的に親コントロールに到達すると思います。これが、単純なKeyDownイベントに対して行うことです。
<common:LayoutAwarePage
x:Name="pageRoot"
//elided
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" KeyDown="MyEventHandler">
于 2013-02-07T12:47:16.887 に答える
0
グローバルショートカットはすべてのページに適用される1つのクラスの機能を使用するため、最善の解決策はルート要素を使用することでした。つまり、各ページで各ショートカットを個別に処理する必要があり、エラーが発生するリスクがあります。
私のXAMLは次のように設定されました。
<Page
Name="root"
...>
...
</Page>
そのページを操作するための私のC#は次のようになります:
...
namespace DenisQuiz.UWP
{
public sealed partial class StudyADeck : Page
{
...
public StudyADeck()
{
...
// Keyboard shortcuts
root.KeyDown += Root_KeyDown;
}
private void Root_KeyDown(object sender, KeyRoutedEventArgs e)
{
switch (e.Key)
{
case Windows.System.VirtualKey.F:
FlipCard();
break;
case Windows.System.VirtualKey.Right:
NextCard();
break;
case Windows.System.VirtualKey.Left:
PreviousCard();
break;
case Windows.System.VirtualKey.S:
Frame.GoBack(); // Stop Studying
break;
case Windows.System.VirtualKey.E:
Frame.Navigate(typeof(EditANotecard)); // Edit this card
break;
case Windows.System.VirtualKey.D:
DeleteNotecardAsync();
break;
default:
break;
}
}
...
名前root
には、そのウィンドウが開いているときに行われたキーを押すことで、式を介してアクセスされますroot.KeyDown += Root_KeyDown
。これによりメソッドが呼び出さRoot_KeyDown()
れ、keypress引数によって送信されたキーに基づいて任意の関数を実装できますKeyRoutedEventArgs e
。
私のコードは、switch
主要な機能を決定するステートメントを実装しています。
于 2017-12-06T03:01:41.310 に答える