注意
Silverlight 已经退休,正式退出支持。 有关详细信息,请参阅 Silverlight 终止支持。
本文介绍如何使用中文或日语 IME 将许多字符键入 Silverlight TextBox 或 RichTextBox 时出现的问题。
适用于: Silverlight
原始 KB 数: 2450968
现象
在 Silverlight TextBox 中,通过 Microsoft 的简体中文、繁体中文或日语输入法编辑器(IME)在合成窗口中输入大量文本,但不提交字符到 TextBox 时,可能会看到浏览器抛出异常,并且会看到合成窗口中的文本块被重复并提交到 TextBox。 此问题可能发生在任何版本的 Windows 上,并且可能发生在 Internet Explorer、Firefox 和 Chrome 中。 在 Silverlight RichTextBox 中执行相同操作时,也会发生此问题的变体,在这种情况下,浏览器中会引发未经处理的异常。
原因
这是因为 Silverlight 中存在 bug。
决议
防止这种情况发生的唯一方法是在达到 40 个字符限制之前在合成窗口中提交字符。
以下是重现步骤
重现问题的步骤可能因 IME 而异。 它似乎与使用哪个浏览器或者在哪个平台上运行无关紧要。 我本人在 Vista 系统中使用中文(简体)Microsoft 拼音输入法、中文(繁体)新注音输入法以及日语输入法时,亲自重现了该问题。 重现步骤如下所示。
- 创建 Silverlight 4 应用程序
- 添加能够包含至少 60 个字符的 TextBox。
- 运行该应用程序。 将在浏览器中看到文本框。 将焦点设置到文本框上,激活中文(简体)Microsoft 拼音输入法,并将输入模式设置为中文。
- 请从英语键盘反复在 Silverlight 文本框中键入以下三个字母:“a”、“s”和“d”。
在第 47 个字符处附近,您会看到一些字符重复,并可以看到抛出以下异常:
Silverlight 应用程序中的未处理错误
代码:4004
类别:ManagedRuntimeError
消息:System.Exception:灾难性故障(来自 HRESULT 的异常:0X8000FFFF(E_UNEXPECTED))在 MS.Internal.XcpImports.CheckHResult(UInt32 hr) 上,在 MS.Internal.XcpImports.Control_Raise(Control control, IManagedPeerBase arguments, Byte nDelegate) 上,在 System.Windows.Controls.TextBox.OnTextInputUpdate(TextCompositionEventArgs e) 上,在 System.Windows.Controls.Control.OnTextInputUpdate(Control ctrl, EventArgs e) 上。
...