2013-07-16 112 views
2

在使用Google Chrome的我的家用PC(28.0.1500.72m版本)中,我無法將非英文文本輸入到Silverlight應用程序中TextBox:我可以切換鍵盤並看到它在迷你托盤中進行了更改,但是當按下鍵盤上的任意鍵時,我仍然收到英文字符。如果我在其他應用程序(記事本)中輸入非英文文本,請將其複製並粘貼到我的Silverlight控件中 - 將其正確複製。Silverlight:無法在文本框中輸入俄文文本

在同一時間:

  • 一切都在IE
  • 我能找到允許enterring文本在非英語語言

其他Silverlight應用程序爲什麼出現這種情況和如何解決並啓用輸入非英文字符的問題?

P.S.我有以下環境配置:

  • 操作系統:Windows 8,64
  • 本地安裝的Silverlight 5.1.20513.0 64版本
  • Silverlight應用程序本身使用VS2012編譯,更新3
  • Silverlight應用程序它使用Silverlight 4編寫。

PPS其他谷歌瀏覽器用戶報告同樣的問題。

回答

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. 
} 

方法(上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); 
} 

記住,它來自一個非常簡單的方法(檢查是否給定的角色是不是俄羅斯的那些內執行變更前上市),這可能會推動不那麼準確的結果。我沒有俄羅斯的知識(既不瞭解您提及的問題的確切條件),因此在這方面無法提供進一步的幫助;但我想你不會發現任何問題來提高此預分析的準確性(決定何時應該替換角色)。

+0

更改區域設置幫助...謝謝!但現在我不能輸入英語:)解決方案比沒有好,但不是理想。不太喜歡隨時進行文本轉換的想法,但這可能是一種選擇。 – Budda

+0

任何其他想法仍然歡迎! – Budda

+0

@布達對不起,但我沒有更多的想法。從我的測試中,我會建議你依靠VS 2010來完全確定(就其看起來完美而言)。如果默認配置無論如何都失敗了,您擁有的唯一選項是即時更改字符(正如您在我的代碼中看到的,該過程非常快)。關於角色轉換方法,我在這方面做了一些研究,但是找不到比我提出的更好的東西。 – varocarbas

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;