【问题标题】:Silverlight: can't enter russian text into a TextBoxSilverlight:无法在 TextBox 中输入俄语文本
【发布时间】:2013-07-14 01:42:49
【问题描述】:

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

同时:

  • 在 IE 中一切正常
  • 我找到了其他允许输入非英语文本的 silverlight 应用程序

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

附:我有以下环境配置:

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

附言其他 Google Chrome 用户报告了同样的问题。

【问题讨论】:

    标签: c# asp.net silverlight textbox keyboard


    【解决方案1】:

    我已将计算机中的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.
    }
    

    在适用的情况下处理字符替换的方法(在textBox1TextChanged 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);
    }
    

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

    【讨论】:

    • 更改区域设置有帮助...谢谢!但是现在我不能输入英文:) 解决方案总比没有好,但不是一个理想的。不太喜欢即时进行文本转换,但这可能是一种选择。
    • @Budda 对此感到抱歉,但我没有更多的想法。根据我的测试,我建议您完全确定 VS 2010(就它似乎可以完美运行而言)。如果默认配置仍然失败,您唯一的选择就是即时更改字符(正如您在我的代码中看到的那样,该过程非常快)。关于改变性格的方法,我在这方面做了一些研究,但找不到比我提出的更好的方法。
    • @Budda 抱歉,但也许我没有正确理解您的意思:您是说您计算机中的区域设置未设置为俄语?如果您的区域设置设置为俄语(我想您知道这一点),您只能输入俄语字符。我电脑里的所有内容都是西班牙语,当我将区域设置更改为俄语时,我输入的都是俄语字符。例如,当我尝试在 VS 中编写代码时,出现了俄语字符,因此一切都是错误的(因为我的 VS 只能识别西方(或任何名称)字符)。
    • @Budda 请记住,每次击键后屏幕上显示的内容由区域设置定义。比如我的西班牙语键盘+西班牙语区域设置,如果我输入@,就会出现@;如果我将区域设置更改为英语,例如,当我按下 @ 键时,会出现其他符号,因为在英语关键字中,@ 位于其他位置。如果尽管您的区域设置,您想显示不同的字符,唯一的方法是建议更换;或者,最终,我担心这是不可能的本地(应用程序)区域设置更改。
    • @Budda ... 或者您可能会根据按下的键而不是显示的文本进行替换。但是在任何情况下都需要进行替换,只要您想要显示的字符与指示相应区域设置提供的字符不同。但是恐怕VS / Silverlight没有错误(如果我正确理解了您的观点)。
    【解决方案2】:

    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;
    

    【讨论】:

      猜你喜欢
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-29
      • 1970-01-01
      • 2018-06-11
      • 2013-08-03
      相关资源
      最近更新 更多