2012-08-09 85 views
0

我將一個浮動屬性綁定到我的TextBox控件。如果我使用「en」作爲我的語言首選項,那麼這些工作正確。 正確解析輸入數字「1.123」。WINRT文本框數字格式不尊重當前文化

如果我將mur文化切換爲「de」TextBox(和TextBlocks)中沒有任何更改。仍然一切都用「。」格式化。

通過WinRT的「數字」鍵盤輸入一個數字是使用「,」作爲分隔符。但訓練數字不會成爲焦點丟失後的數字的一部分(並且綁定屬性已更新) 因此,「1,234」應該解析爲「1.234」,但ist會轉換爲「1」

該應用程序.xaml.cs包含了一些用於確保文化設置爲正確語言的更多初始化,允許的語言是(「en」和「de」(*,proj文件) CultureInfo.CurrentCulture已正確設置爲「de」if你闖入調試器。

public App() 
{ 
    Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride =  CultureInfo.CurrentCulture.Name; 
    CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CurrentCulture; 
    CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CurrentCulture; 
+0

你是如何改變文化的?如果通過Windows更改用戶的文化,是否確保應用程序已終止,然後重新啓動? [CultureInfo.CurrentCulture](http://msdn.microsoft.com/en-us/library/windows/apps/system.globalization.cultureinfo.currentculture(v = vs.110).aspx)表示該文化已設置只在線程創建。 – 2012-08-09 15:07:05

+0

我是通過Windows設置語言。 App.cs包含額外的設置,以確保正確的語言分配: – Obiwan007 2012-08-10 09:30:41

回答

1

Application構造設置PrimaryLanguageOverrideDefaultThreadCurrentCultureDefaultThreadCurrentUICulture沒有任何效果,因爲它們Ø只適用於新的主題。但是,您的主UI線程已經被創建,並且在構造函數輸入時已經設置了其文化。

要強制更改現有的UI線程,您必須設置Thread.CurrentCulture,如CultureInfo.CurrentCulture所述;但是,WinRT不支持Thread類。

這導致了爲什麼需要任何手動文化變化的問題。應用程序應該在啓動時或從休眠狀態恢復時自動提取用戶的Windows文化。

+0

Thread.CurrentCulture不幸在WinRT中不受支持,當我不完全錯誤... WPF!= WinRT。 我認爲文化是正確設置的系統 - 但綁定數字的格式和解析是不正確的。 – Obiwan007 2012-08-10 17:24:06

+0

關於無法在WinRT中的現有線程上設置文化的好處。我通過相應的答案更新爲什麼系統文化不會「與數據綁定一起工作」仍然是一個謎。 – 2012-08-10 21:23:42

0

爲了讓我們可以使用InvariantCulture的設置,

「ApplicationLanguages.PrimaryLanguageOverride = CultureInfo.InvariantCulture.TwoLetterISOLanguageName;」

這對我有效。