2012-01-13 206 views
9

我經常使用TextBox綁定到整數,沒有太多問題。將文本框綁定到文本框

但是,如果我嘗試將TextBox綁定到Double,它不起作用。

當我鍵入5,85(,作爲我的文化decimalSeperator)我通過585.0到double值。

它如何被轉換,我可以用什麼解決方案來解決這個問題? ValueConverter會是最好的解決方案嗎?

+2

這聽起來像是要麼不是你的小數點分隔符,要麼應用程序不關心文化。 – 2012-01-13 18:21:04

+0

我正在調試,並確保'NumberFormatInfo.CurrentInfo.NumberDecimalSeparator'是我雖然它。這是正確的財產不是? – 2012-01-13 18:25:29

+1

這聽起來是正確的...... – 2012-01-13 18:28:47

回答

4

你可以嘗試添加這對您的應用程序的構造:

FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), 
      new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag))); 

但是,請注意,如果您自定義的小數點分隔符,這將無法正常工作。 (WPF double valued data binding with custom decimal separator

+0

爲什麼不簡單地在主窗口構造函數中設置Language = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)? – Clemens 2012-01-13 22:59:01

+1

Clemens,您的解決方案也可以工作,但是您必須記住要將其與應用程序中創建的每個窗口分開放置,與應用程序構造方法相比較,其中語言是爲應用程序中的所有框架元素設置的 – friskm 2012-01-15 10:28:34

+0

您是對的。在這種情況下有意義覆蓋內置依賴項屬性的默認值。 – Clemens 2012-01-15 12:34:29

1

爲了診斷,你可以在這兩行代碼添加到您的程序的開始......

var cc = Thread.CurrentThread.CurrentCulture; 
    var cuic = Thread.CurrentThread.CurrentUICulture; 

,並比較結果。由於UI線程通常是以這種方式完成的,所以'cuic'文化將保持'en-US'的機會是相當好的。您可以通過在項目文件中設置<UICulture>標籤更改此,或者你可以嘗試診斷...

Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture; 

和評估副作用。否則,你可以實現一個IValueConverter ...