首页 > 解决方案 > WPF 文本更改事件未在“S”上触发

问题描述

我有一个 WPF 应用程序,它是托管在另一家公司的应用程序中的用户控件。

我创建的文本框将接受除大写“S”之外的所有字符和数字。它们是绑定到字符串属性的 MVVM,该字符串属性适用于除“S”之外的任何其他字符。文本更改事件也会为每个其他字符触发。不过,on 键的向下和向上将为“S”字符触发。文本框不显示字符。

我在某处读到,有时与托管用户控件发生冲突,其中它不接受某些输入,但我无法设置解决此问题所需的 ElementHost 属性,因为在这种情况下我没有对主机窗口的编程访问权限。该控件由另一个用户控件托管,该用户控件托管在第三方应用程序下,我也在添加一个应用程序。

当其他所有键都起作用时,我感到目瞪口呆。我在另一台机器上检查了这个发现同样的问题,所以它不依赖于硬件。

标签: c#wpf

解决方案


我怀疑您已经订阅了TextChanged事件。如果是这种情况,只需订阅PreviewKeyDown,应用您的过滤器并将 e.Handled 设置为 true 以接收它。

private void PreviewKeyDownFilter(object sender, KeyEventArgs e)
{
    if (e.Key == Key.S && Keyboard.IsKeyDown(Key.LeftShift))
        e.Handled = true;
}

推荐阅读