2013-07-03 122 views
4

僅在WPF中的一個窗口中更改系統語言是否有可能性?更改WPF中的一個/活動窗口的系統語言

我知道InputLanguageManager,但我認爲它在整個系統中改變語言。

+0

「系統」語言是什麼意思?用於顯示消息和標籤的語言或用於解析輸入的語言?幾乎所有受語言影響的函數都接受一個I​​FormatProvider參數,您可以使用它來傳遞您想要的CultureInfo –

+0

這是否意味着更改應用程序中的輸入鍵盤佈局? – Smartis

+0

這適用於我在整個操作系統中使用的語言。 –

回答

14

InputLanguageManager完全符合您的要求。它改變當前應用程序的鍵盤佈局。

鍵盤佈局由操作系統爲每個正在運行的應用程序保留。例如。如果您打開記事本並切換到俄語,打開IE並切換到英語,當您激活記事本應用程序時,鍵盤語言環境仍然是俄語。

下面的行改變鍵盤的區域設置只是爲了當前應用程序:

InputLanguageManager.Current.CurrentInputLanguage = new CultureInfo("el-GR"); 

系統語言(或更確切地說,系統區域)和鍵盤佈局是完全不同的概念。鍵盤佈局是鍵盤的佈局。

有在.NET應用程序使用了三個不同的區域:

  • 的UI區域是用於顯示消息和選擇局部UI字符串和佈局的語言環境。您可以通過設置其Thread.CurrentUICulture屬性來更改線程的UI語言環境。其初始值由操作系統在區域設置中的顯示語言決定
  • 線程的語言環境用於分析字符串並將日期和數字轉換爲字符串。您可以通過設置Thread.CurrentCulture屬性來更改它。其原始值由操作系統的區域設置管理。格式屬性
  • 系統語言環境由非Unicode應用程序或寫入ASCII文件和控制檯時使用。

您還可以利用WPF數據綁定並使用InputLanguage作爲附加屬性。在你的XAML可以將InputLanguageManager.InputLanguage屬性添加到元素的聲明是這樣的:

<TextBox InputLanguageManager.InputLanguage="en-US"></TextBox> 

您可以將屬性的屬性然後綁定在你的代碼隱藏或你的ViewModel。例如。

<TextBox InputLanguageManager.InputLanguage="{Binding MyLanguageInfo}"></TextBox> 

此屬性設置爲一個特定的值將導致UI元素的鍵盤更改:

MyLanguageInfo = new CultureInfo("en-US"); 

MyLanguageInfo = new CultureInfo("el-GR"); 

你可以用這個走得更遠,並綁定InputLanguage財產其他要素,例如。語言選項列表框

2

對於鍵盤佈局更改您是否正確地使用InputLanguageManager

InputLanguageManager.SetInputLanguage(this,CultureInfo.CreateSpecificCulture("ru")); 

隨着SetInputLanguage()梅索德的第一個參數設置的DependencyObject這是你的鍵盤佈局的目標。

+0

InputLanguage是Windows窗體類,不是WPF類 –

+0

您是對的,我的錯。改變了它。 – Smartis

+0

好的,但如果用戶在系統中沒有俄語,該怎麼辦? –