gpt4 book ai didi

c# - 检测 IME(输入法编辑器)是否在 Silverlight 中处于事件状态

转载 作者:太空狗 更新时间:2023-10-29 22:58:28 24 4
gpt4 key购买 nike

有谁知道如何轻松检测 Windows 操作系统 IME(输入法编辑器)是否在 Silverlight 框架中处于事件状态。让我解释一下导致我出现问题的场景:

我遇到了使用中文(简体,中国)Microsoft 拼音导致 CLR 异常的问题。该场景是当 TextBox 正在处理其 TextChanged 事件时。例如:

  • TextBox 不应接受字符而只能接受数字。为了实现它正在处理其 TextChanged 事件,并且在该事件中,它通过将其 Text 属性逐个字符地反转为最后一个正确的输入来处理输入。在这种情况下,如果使用(中文(简体,中国)Microsoft 拼音)IME 和 a FatalExecutionEngineError被抛出。

在 WPF 中,可以通过使用 InputMethod.Current 不反转 TextChanged 事件中的文本来解决此问题。 ImeState检查 IME 是否处于事件状态。不幸的是,这在 Silverlight 框架中不可用,这就是我发布这个问题的原因。

目前我唯一发现的是我可以将 InputMethod 类的 IsInputMethodEnabled 属性设置为 TextBox 控件以禁用所有 IME 输入,但这当然不仅会禁用不正确的输入,还会禁用正确的输入。

有人知道如何检测 Silverlight 平台中是否使用/激活了 IME 吗?谢谢。

最佳答案

我能够解决 WPF 和 Silverlight 框架中的问题。问题是由于在 IME 输入符号时处理 TextBox 文本导致文本使 IME 本身更改其输入,这看起来 Windows 操作系统无法正常处理并导致 CLR 异常。

我所做的是:

在提到的 WPF 框架中,我使用静态 InputMethod.Current.ImeState 值来确定 IME 是否处于事件状态,如果它具有 On 值,我跳过了在其 TextChanged 事件中恢复 TextBox Text 属性。

在 Silverlight 框架中,我结合使用 TextInputStart、TextInputUpdate 事件和本地私有(private)字段来存储是否检测到 IME。 TextInputUpdate仅当 IME 处于事件状态并用作输入且始终触发 TextInputStart 时才会触发事件。我所做的是:

  1. 创建了一个 bool IsImeActive = false;归档
  2. Hook 到 TextBox 的 TextInputStart 事件
  3. 在该事件中将 IsImeActive 字段设置为 False
  4. Hook 到 TextBox 的 TextInputUpdate 事件
  5. 在该事件中将 IsImeActive 字段设置为 True
  6. 最后,在 TextChanged 事件中添加一个条件来检查 IsImeActive 字段,如果它为 False,则运行处理(反转)输入的逻辑。

希望对您有所帮助。

关于c# - 检测 IME(输入法编辑器)是否在 Silverlight 中处于事件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28369361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com