c# - WPF 文本更改事件未在“S”上触发
问题描述
我有一个 WPF 应用程序,它是托管在另一家公司的应用程序中的用户控件。
我创建的文本框将接受除大写“S”之外的所有字符和数字。它们是绑定到字符串属性的 MVVM,该字符串属性适用于除“S”之外的任何其他字符。文本更改事件也会为每个其他字符触发。不过,on 键的向下和向上将为“S”字符触发。文本框不显示字符。
我在某处读到,有时与托管用户控件发生冲突,其中它不接受某些输入,但我无法设置解决此问题所需的 ElementHost 属性,因为在这种情况下我没有对主机窗口的编程访问权限。该控件由另一个用户控件托管,该用户控件托管在第三方应用程序下,我也在添加一个应用程序。
当其他所有键都起作用时,我感到目瞪口呆。我在另一台机器上检查了这个发现同样的问题,所以它不依赖于硬件。
解决方案
我怀疑您已经订阅了TextChanged事件。如果是这种情况,只需订阅PreviewKeyDown,应用您的过滤器并将 e.Handled 设置为 true 以接收它。
private void PreviewKeyDownFilter(object sender, KeyEventArgs e)
{
if (e.Key == Key.S && Keyboard.IsKeyDown(Key.LeftShift))
e.Handled = true;
}
推荐阅读
- docker - 如何在 Postgres 上将 UUID 与非特权用户一起使用?
- javascript - 在Framework7中的javascript中动态呈现范围滑块
- android - java.lang.InstantiationException: java.lang.Class 不能在 java.lang.Class.newInstance(Native Method) 实例化
- javascript - 通过 React 延迟导入和 Webpack 不会发生代码拆分
- bash - echo 名称不以 1 开头且第二个字符为奇数的目录
- bash - 启动 shell 脚本的别名自动执行
- javascript - 为什么单击元素会提示单击它旁边的复选框?
- r - `rsq` 包中的二项式 glm:错误:找不到对象
- android - 如何从 RecyclerView 中的所有项目中删除按钮/视图?
- linux - 重启后如何避免环境变量在 WSL 终端中重置?