WPF 按键

1,041 阅读10分钟

按键事件的顺序 PreviewKeyDown->KeyDown->PreviewTextInput->TextInput->PreviewKeyUp->KeyUp 如果在PreviewKeyDown/KeyDown中设置了Handled= true,那么TextInput不会触发,但是KeyUp事件不受影响

PreviewKeyDown,KeyDown,PreviewKeyUp,KeyUp事件中,参数KeyEventArgs中包括了 Key,SystemKey,ImeProcessedKey,DeadCharProcessedKey4个关键的key值。

Alt和F10是三个特殊的按键,他们用来激活Menu。当KeyEventArgs.Key 为Key.System,通过KeyEventArgs.SystemKey可以获取这三个按键。 当输入法为中文输入法时,KeyEventArgs.Key 为Key.ImeProcessed,通过KeyEventArgs.ImeProcessedKey可以获取这三个按键。

关于dead key详细的意义,请点击查看wikiDead key

  1. 获取某一个按键的状态 KeyStates Keyboard.GetKeyStates() e.g. Keyboard.GetKeyStates(Key.F4)
  2. 获取KeyDown的按钮,包括Alt,Ctrl,Shift(不分左右)三个 e.g. if(Keyboard.Modifiers == (ModifierKeys.Alt|ModifierKeys.Control )){}

System.Windows.Input.KeyStates的枚举

public enum KeyStates : byte
{
	/// <summary>The key is not pressed.</summary>
	None = 0x0,
	/// <summary>The key is pressed.</summary>
	Down = 0x1,
	/// <summary>The key is toggled.</summary>
	Toggled = 0x2
}

System.Windows.Input.ModifierKeys的枚举

public enum ModifierKeys
{
	/// <summary>No modifiers are pressed. </summary>
	None = 0x0,
	/// <summary>The ALT key. </summary>
	Alt = 0x1,
	/// <summary>The CTRL key. </summary>
	Control = 0x2,
	/// <summary>The SHIFT key. </summary>
	Shift = 0x4,
	/// <summary>The Windows logo key.</summary>
	Windows = 0x8
}

System.Windows.Input.Key 的枚举

public enum Key
{
	/// <summary>No key pressed. </summary>
	None = 0,
	/// <summary>The Cancel key. </summary>
	Cancel = 1,
	/// <summary>The Backspace key. </summary>
	Back = 2,
	/// <summary>The Tab key. </summary>
	Tab = 3,
	/// <summary>The Linefeed key. </summary>
	LineFeed = 4,
	/// <summary>The Clear key. </summary>
	Clear = 5,
	/// <summary>The Return key. </summary>
	Return = 6,
	/// <summary>The Enter key. </summary>
	Enter = 6,
	/// <summary>The Pause key. </summary>
	Pause = 7,
	/// <summary>The Caps Lock key. </summary>
	Capital = 8,
	/// <summary>The Caps Lock key. </summary>
	CapsLock = 8,
	/// <summary>The IME Kana mode key. </summary>
	KanaMode = 9,
	/// <summary>The IME Hangul mode key. </summary>
	HangulMode = 9,
	/// <summary>The IME Junja mode key. </summary>
	JunjaMode = 10,
	/// <summary>The IME Final mode key. </summary>
	FinalMode = 11,
	/// <summary>The IME Hanja mode key. </summary>
	HanjaMode = 12,
	/// <summary>The IME Kanji mode key. </summary>
	KanjiMode = 12,
	/// <summary>The ESC key. </summary>
	Escape = 13,
	/// <summary>The IME Convert key. </summary>
	ImeConvert = 14,
	/// <summary>The IME NonConvert key. </summary>
	ImeNonConvert = 0xF,
	/// <summary>The IME Accept key. </summary>
	ImeAccept = 0x10,
	/// <summary>The IME Mode change request. </summary>
	ImeModeChange = 17,
	/// <summary>The Spacebar key. </summary>
	Space = 18,
	/// <summary>The Page Up key. </summary>
	Prior = 19,
	/// <summary>The Page Up key. </summary>
	PageUp = 19,
	/// <summary>The Page Down key. </summary>
	Next = 20,
	/// <summary>The Page Down key. </summary>
	PageDown = 20,
	/// <summary>The End key. </summary>
	End = 21,
	/// <summary>The Home key. </summary>
	Home = 22,
	/// <summary>The Left Arrow key. </summary>
	Left = 23,
	/// <summary>The Up Arrow key. </summary>
	Up = 24,
	/// <summary>The Right Arrow key. </summary>
	Right = 25,
	/// <summary>The Down Arrow key. </summary>
	Down = 26,
	/// <summary>The Select key. </summary>
	Select = 27,
	/// <summary>The Print key. </summary>
	Print = 28,
	/// <summary>The Execute key. </summary>
	Execute = 29,
	/// <summary>The Print Screen key. </summary>
	Snapshot = 30,
	/// <summary>The Print Screen key. </summary>
	PrintScreen = 30,
	/// <summary>The Insert key. </summary>
	Insert = 0x1F,
	/// <summary>The Delete key. </summary>
	Delete = 0x20,
	/// <summary>The Help key. </summary>
	Help = 33,
	/// <summary>The 0 (zero) key. </summary>
	D0 = 34,
	/// <summary>The 1 (one) key. </summary>
	D1 = 35,
	/// <summary>The 2 key. </summary>
	D2 = 36,
	/// <summary>The 3 key. </summary>
	D3 = 37,
	/// <summary>The 4 key. </summary>
	D4 = 38,
	/// <summary>The 5 key. </summary>
	D5 = 39,
	/// <summary>The 6 key. </summary>
	D6 = 40,
	/// <summary>The 7 key. </summary>
	D7 = 41,
	/// <summary>The 8 key. </summary>
	D8 = 42,
	/// <summary>The 9 key. </summary>
	D9 = 43,
	/// <summary>The A key. </summary>
	A = 44,
	/// <summary>The B key. </summary>
	B = 45,
	/// <summary>The C key. </summary>
	C = 46,
	/// <summary>The D key. </summary>
	D = 47,
	/// <summary>The E key. </summary>
	E = 48,
	/// <summary>The F key. </summary>
	F = 49,
	/// <summary>The G key. </summary>
	G = 50,
	/// <summary>The H key. </summary>
	H = 51,
	/// <summary>The I key. </summary>
	I = 52,
	/// <summary>The J key. </summary>
	J = 53,
	/// <summary>The K key. </summary>
	K = 54,
	/// <summary>The L key. </summary>
	L = 55,
	/// <summary>The M key. </summary>
	M = 56,
	/// <summary>The N key. </summary>
	N = 57,
	/// <summary>The O key. </summary>
	O = 58,
	/// <summary>The P key. </summary>
	P = 59,
	/// <summary>The Q key. </summary>
	Q = 60,
	/// <summary>The R key. </summary>
	R = 61,
	/// <summary>The S key. </summary>
	S = 62,
	/// <summary>The T key. </summary>
	T = 0x3F,
	/// <summary>The U key. </summary>
	U = 0x40,
	/// <summary>The V key. </summary>
	V = 65,
	/// <summary>The W key. </summary>
	W = 66,
	/// <summary>The X key. </summary>
	X = 67,
	/// <summary>The Y key. </summary>
	Y = 68,
	/// <summary>The Z key. </summary>
	Z = 69,
	/// <summary>The left Windows logo key (Microsoft Natural Keyboard). </summary>
	LWin = 70,
	/// <summary>The right Windows logo key (Microsoft Natural Keyboard). </summary>
	RWin = 71,
	/// <summary>The Application key (Microsoft Natural Keyboard). </summary>
	Apps = 72,
	/// <summary>The Computer Sleep key. </summary>
	Sleep = 73,
	/// <summary>The 0 key on the numeric keypad. </summary>
	NumPad0 = 74,
	/// <summary>The 1 key on the numeric keypad. </summary>
	NumPad1 = 75,
	/// <summary>The 2 key on the numeric keypad. </summary>
	NumPad2 = 76,
	/// <summary>The 3 key on the numeric keypad. </summary>
	NumPad3 = 77,
	/// <summary>The 4 key on the numeric keypad. </summary>
	NumPad4 = 78,
	/// <summary>The 5 key on the numeric keypad. </summary>
	NumPad5 = 79,
	/// <summary>The 6 key on the numeric keypad. </summary>
	NumPad6 = 80,
	/// <summary>The 7 key on the numeric keypad. </summary>
	NumPad7 = 81,
	/// <summary>The 8 key on the numeric keypad. </summary>
	NumPad8 = 82,
	/// <summary>The 9 key on the numeric keypad. </summary>
	NumPad9 = 83,
	/// <summary>The Multiply key. </summary>
	Multiply = 84,
	/// <summary>The Add key. </summary>
	Add = 85,
	/// <summary>The Separator key. </summary>
	Separator = 86,
	/// <summary>The Subtract key. </summary>
	Subtract = 87,
	/// <summary>The Decimal key. </summary>
	Decimal = 88,
	/// <summary>The Divide key. </summary>
	Divide = 89,
	/// <summary>The F1 key. </summary>
	F1 = 90,
	/// <summary>The F2 key. </summary>
	F2 = 91,
	/// <summary>The F3 key. </summary>
	F3 = 92,
	/// <summary>The F4 key. </summary>
	F4 = 93,
	/// <summary>The F5 key. </summary>
	F5 = 94,
	/// <summary>The F6 key. </summary>
	F6 = 95,
	/// <summary>The F7 key. </summary>
	F7 = 96,
	/// <summary>The F8 key. </summary>
	F8 = 97,
	/// <summary>The F9 key. </summary>
	F9 = 98,
	/// <summary>The F10 key. </summary>
	F10 = 99,
	/// <summary>The F11 key. </summary>
	F11 = 100,
	/// <summary>The F12 key. </summary>
	F12 = 101,
	/// <summary>The F13 key. </summary>
	F13 = 102,
	/// <summary>The F14 key. </summary>
	F14 = 103,
	/// <summary>The F15 key. </summary>
	F15 = 104,
	/// <summary>The F16 key. </summary>
	F16 = 105,
	/// <summary>The F17 key. </summary>
	F17 = 106,
	/// <summary>The F18 key. </summary>
	F18 = 107,
	/// <summary>The F19 key. </summary>
	F19 = 108,
	/// <summary>The F20 key. </summary>
	F20 = 109,
	/// <summary>The F21 key. </summary>
	F21 = 110,
	/// <summary>The F22 key. </summary>
	F22 = 111,
	/// <summary>The F23 key. </summary>
	F23 = 112,
	/// <summary>The F24 key. </summary>
	F24 = 113,
	/// <summary>The Num Lock key. </summary>
	NumLock = 114,
	/// <summary>The Scroll Lock key. </summary>
	Scroll = 115,
	/// <summary>The left Shift key. </summary>
	LeftShift = 116,
	/// <summary>The right Shift key. </summary>
	RightShift = 117,
	/// <summary>The left CTRL key. </summary>
	LeftCtrl = 118,
	/// <summary>The right CTRL key. </summary>
	RightCtrl = 119,
	/// <summary>The left ALT key. </summary>
	LeftAlt = 120,
	/// <summary>The right ALT key. </summary>
	RightAlt = 121,
	/// <summary>The Browser Back key. </summary>
	BrowserBack = 122,
	/// <summary>The Browser Forward key. </summary>
	BrowserForward = 123,
	/// <summary>The Browser Refresh key. </summary>
	BrowserRefresh = 124,
	/// <summary>The Browser Stop key. </summary>
	BrowserStop = 125,
	/// <summary>The Browser Search key. </summary>
	BrowserSearch = 126,
	/// <summary>The Browser Favorites key. </summary>
	BrowserFavorites = 0x7F,
	/// <summary>The Browser Home key. </summary>
	BrowserHome = 0x80,
	/// <summary>The Volume Mute key. </summary>
	VolumeMute = 129,
	/// <summary>The Volume Down key. </summary>
	VolumeDown = 130,
	/// <summary>The Volume Up key. </summary>
	VolumeUp = 131,
	/// <summary>The Media Next Track key. </summary>
	MediaNextTrack = 132,
	/// <summary>The Media Previous Track key. </summary>
	MediaPreviousTrack = 133,
	/// <summary>The Media Stop key. </summary>
	MediaStop = 134,
	/// <summary>The Media Play Pause key. </summary>
	MediaPlayPause = 135,
	/// <summary>The Launch Mail key. </summary>
	LaunchMail = 136,
	/// <summary>The Select Media key. </summary>
	SelectMedia = 137,
	/// <summary>The Launch Application1 key. </summary>
	LaunchApplication1 = 138,
	/// <summary>The Launch Application2 key. </summary>
	LaunchApplication2 = 139,
	/// <summary>The OEM 1 key. </summary>
	Oem1 = 140,
	/// <summary>The OEM Semicolon key. </summary>
	OemSemicolon = 140,
	/// <summary>The OEM Addition key. </summary>
	OemPlus = 141,
	/// <summary>The OEM Comma key. </summary>
	OemComma = 142,
	/// <summary>The OEM Minus key. </summary>
	OemMinus = 143,
	/// <summary>The OEM Period key. </summary>
	OemPeriod = 144,
	/// <summary>The OEM 2 key. </summary>
	Oem2 = 145,
	/// <summary>The OEM Question key. </summary>
	OemQuestion = 145,
	/// <summary>The OEM 3 key. </summary>
	Oem3 = 146,
	/// <summary>The OEM Tilde key. </summary>
	OemTilde = 146,
	/// <summary>The ABNT_C1 (Brazilian) key. </summary>
	AbntC1 = 147,
	/// <summary>The ABNT_C2 (Brazilian) key. </summary>
	AbntC2 = 148,
	/// <summary>The OEM 4 key. </summary>
	Oem4 = 149,
	/// <summary>The OEM Open Brackets key. </summary>
	OemOpenBrackets = 149,
	/// <summary>The OEM 5 key. </summary>
	Oem5 = 150,
	/// <summary>The OEM Pipe key. </summary>
	OemPipe = 150,
	/// <summary>The OEM 6 key. </summary>
	Oem6 = 151,
	/// <summary>The OEM Close Brackets key. </summary>
	OemCloseBrackets = 151,
	/// <summary>The OEM 7 key. </summary>
	Oem7 = 152,
	/// <summary>The OEM Quotes key. </summary>
	OemQuotes = 152,
	/// <summary>The OEM 8 key. </summary>
	Oem8 = 153,
	/// <summary>The OEM 102 key. </summary>
	Oem102 = 154,
	/// <summary>The OEM Backslash key. </summary>
	OemBackslash = 154,
	/// <summary>A special key masking the real key being processed by an IME. </summary>
	ImeProcessed = 155,
	/// <summary>A special key masking the real key being processed as a system key. </summary>
	System = 156,
	/// <summary>The OEM ATTN key. </summary>
	OemAttn = 157,
	/// <summary>The DBE_ALPHANUMERIC key. </summary>
	DbeAlphanumeric = 157,
	/// <summary>The OEM FINISH key. </summary>
	OemFinish = 158,
	/// <summary>The DBE_KATAKANA key. </summary>
	DbeKatakana = 158,
	/// <summary>The OEM COPY key. </summary>
	OemCopy = 159,
	/// <summary>The DBE_HIRAGANA key. </summary>
	DbeHiragana = 159,
	/// <summary>The OEM AUTO key. </summary>
	OemAuto = 160,
	/// <summary>The DBE_SBCSCHAR key. </summary>
	DbeSbcsChar = 160,
	/// <summary>The OEM ENLW key. </summary>
	OemEnlw = 161,
	/// <summary>The DBE_DBCSCHAR key. </summary>
	DbeDbcsChar = 161,
	/// <summary>The OEM BACKTAB key. </summary>
	OemBackTab = 162,
	/// <summary>The DBE_ROMAN key. </summary>
	DbeRoman = 162,
	/// <summary>The ATTN key. </summary>
	Attn = 163,
	/// <summary>The DBE_NOROMAN key. </summary>
	DbeNoRoman = 163,
	/// <summary>The CRSEL key. </summary>
	CrSel = 164,
	/// <summary>The DBE_ENTERWORDREGISTERMODE key. </summary>
	DbeEnterWordRegisterMode = 164,
	/// <summary>The EXSEL key. </summary>
	ExSel = 165,
	/// <summary>The DBE_ENTERIMECONFIGMODE key. </summary>
	DbeEnterImeConfigureMode = 165,
	/// <summary>The ERASE EOF key. </summary>
	EraseEof = 166,
	/// <summary>The DBE_FLUSHSTRING key. </summary>
	DbeFlushString = 166,
	/// <summary>The PLAY key. </summary>
	Play = 167,
	/// <summary>The DBE_CODEINPUT key. </summary>
	DbeCodeInput = 167,
	/// <summary>The ZOOM key. </summary>
	Zoom = 168,
	/// <summary>The DBE_NOCODEINPUT key. </summary>
	DbeNoCodeInput = 168,
	/// <summary>A constant reserved for future use. </summary>
	NoName = 169,
	/// <summary>The DBE_DETERMINESTRING key. </summary>
	DbeDetermineString = 169,
	/// <summary>The PA1 key. </summary>
	Pa1 = 170,
	/// <summary>The DBE_ENTERDLGCONVERSIONMODE key. </summary>
	DbeEnterDialogConversionMode = 170,
	/// <summary>The OEM Clear key. </summary>
	OemClear = 171,
	/// <summary>The key is used with another key to create a single combined character.</summary>
	DeadCharProcessed = 172
}