Silverlight:无法将俄文本输入TextBox

时间:2013-07-16 02:24:43

标签: c# asp.net silverlight textbox keyboard

在我的家用电脑上使用谷歌浏览器(28.0.1500.72m版本)我无法在Silverlight应用程序TextBox中输入非英文文本:我可以切换键盘,我看到它在迷你托盘中被更改,但是当我按键盘上的任意键我一直接收英文字符。如果我在其他应用程序(NotePad)中输入非英文文本,将其复制并粘贴到我的silverlight控件中 - 它将被正确复制。

在同一时间:

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

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

P.S。我有以下环境配置:

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

P.P.S。其他Google Chrome用户报告的问题相同。

2 个答案:

答案 0 :(得分:2)

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

您可以做的是确保您的应用程序始终根据目标计算机中的确切配置输出俄语字符。我找到了一个非常有趣的post on this front。我最喜欢的选项是第一个:依赖转换字典。适用于您的情况,它将是这样的:

全局声明的词典:

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上)处理适用时的字符替换。

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);
}

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

答案 1 :(得分:0)

Silverlight有些限制globalization support。特别是,您可能需要将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;