『WPF』TextBox元素过滤键盘输入

本文最后更新于 2019年 5月 6号 凌晨 2点 03分,并同步发布于 :


『WPF』TextBox元素过滤键盘输入

在编写 WPF桌面应用程序时, 可能需要限制TextBox(输入框)只能输入数字或只能英文字符之类的情况


首先, WPF 中有关键盘输入的事件有 :

  • KeyDownKeyUp 事件(冒泡路由事件)

    这两个事件会被 TextBox 元素挂起

  • PreviewKeyDownPreviewKeyUp 事件(隧道路由事件)

    当按键弹起时才会触发 PreviewKeyUp 事件(这时内容已经输入到 TextBox 元素中)

  • TextInput 事件(冒泡路由事件)

    此事件会被 TextBox 元素挂起

  • PreviewTextInput 事件(隧道路由事件)
  • TextBox类新增的 TextChanged 事件(普通事件)

    TextBox 的内容改变时才会触发此事件, 这时内容已经输入到 TextBox 元素中

现在可用的事件有: PreviewKeyDownPreviewTextInput 。(事件触发顺序: PreviewKeyDown >>> PreviewTextInput)

PreviewTextInput 事件的参数提供了Text属性, 可以在发生此事件时进行验证输入。比较方便, 也不用编写更低级的按键判断。


示例 (限制只能输入数字):

将事件的 Handled属性设置为ture, 阻止事件继续往下传递

『WPF』TextBox元素过滤键盘输入

但是! 当按下空格键时, 会直接绕过 PreviewTextInput 事件 !

所以需要在 PreviewKeyDown 事件中阻止 Space (空格键)的输入。

示例代码 :

『WPF』TextBox元素过滤键盘输入


—END—