2

在使用 Google Chrome(28.0.1500.72m 版本)的家用 PC 上,我无法在 Silverlight 应用程序 TextBox 中输入非英文文本:我可以切换键盘,我看到它在迷你托盘中发生了变化,但是当我按下任意键时在键盘上,我不断收到英文字符。如果我在其他应用程序(记事本)中输入非英文文本,请将其复制并粘贴到我的 silverlight 控件中 - 它被正确复制。

在同一时间:

  • 一切都在 IE 中运行
  • 我能够找到其他允许输入非英语文本的 silverlight 应用程序

为什么会发生这种情况以及如何解决和启用输入非英文字符的问题?

PS我有以下环境配置:

  • 操作系统:Windows 8、x64
  • 本地安装 5.1.20513.0 x64 版 Silverlight
  • SilverLight 应用程序本身是使用 VS2012 编译的,更新 3
  • 使用 Silverlight 4 编写的 SilverLight 应用程序。

PPS 其他 Google Chrome 用户报告的相同问题。

4

2 回答 2

2

我已将Regional Settings计算机中的 更改为俄语,并观察到 ​​VS 2010 在所有情况下(SilverLight、ASP、winforms)都提供了预期的性能。请注意,我已经使用 Chrome(与您的版本相同)和 Windows 7 进行了测试。我不知道为什么会发生您报告的错误。

您可以做的是确保您的应用程序始终输出俄语字符,这与目标计算机中的确切配置无关。我在这方面发现了一个非常有趣的帖子。我最喜欢的选项是第一个:依靠转换字典。应用于您的情况,它将是这样的:

全局声明的字典:

Dictionary<string, string> enToRus;

Form Load填充上述字典时调用的函数:

private void populateDict()
{
    enToRus = new Dictionary<string, string>();
    enToRus.Add("P", "П");
    enToRus.Add("e", "e");
    enToRus.Add("t", "т");
    enToRus.Add("r", "р");
    //etc.
}

textBox1 TextChanged Event在适用的情况下处理字符替换的方法(on )。

private void textBox1_TextChanged(object sender, TextChangedEventArgs e)
{
    textBox1.Select(textBox1.Text.Length - 1, 1);
    if (textBox1.SelectedText.Trim().Length > 0)
    {
        if (!enToRus.ContainsValue(textBox1.SelectedText) && enToRus.ContainsKey(textBox1.SelectedText))
        {
            textBox1.SelectedText = enToRus[textBox1.SelectedText];
        }
    }
    textBox1.Select(textBox1.Text.Length, 1);
}

请记住,它来自一种非常简单的方法(在执行更改之前检查给定字符是否未列在俄语字符中),这可能会导致结果不太准确。我没有任何俄语知识(也不了解您提到的问题出现的确切条件),因此在这方面无法提供进一步的帮助;但我想你不会发现任何问题来提高这个预分析的准确性(决定什么时候应该替换一个字符)。

于 2013-07-20T12:29:23.910 回答
0

Silverlight 对全球化的支持有些有限。特别是,您可能需要设置Thread.CurrentThread.CurrentUICulture为俄罗斯文化(像这样):

// Change the current and current UI culture to ru-RU (Russian).
CultureInfo ruCulture = new CultureInfo("ru-RU");
Thread.CurrentThread.CurrentCulture = ruCulture;
Thread.CurrentThread.CurrentUICulture = ruCulture;
于 2013-07-22T17:55:12.387 回答