爲什麼這行代碼WPF的StringFormat = {0:C}顯示爲美元
<TextBlock Text="{Binding Net, StringFormat=c}"/>
輸出結果爲$ XX.XX當我所有的區域設置被設置爲英國。我希望它輸出爲£xx.xx。有任何想法嗎?我嘗試過不同的stringformat變體,包括StringFormat = {} {0:C},但仍然得到相同的結果。
感謝您的期待。
爲什麼這行代碼WPF的StringFormat = {0:C}顯示爲美元
<TextBlock Text="{Binding Net, StringFormat=c}"/>
輸出結果爲$ XX.XX當我所有的區域設置被設置爲英國。我希望它輸出爲£xx.xx。有任何想法嗎?我嘗試過不同的stringformat變體,包括StringFormat = {} {0:C},但仍然得到相同的結果。
感謝您的期待。
我不確定這是否已在.NET 4中修復,但WPF在渲染像貨幣或日期之類的東西時從未接受過當前的文化。這是我認爲是一個大規模的疏忽,但幸好很容易糾正。
在你的App類:
protected override void OnStartup(StartupEventArgs e)
{
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(
XmlLanguage.GetLanguage(
CultureInfo.CurrentCulture.IetfLanguageTag)));
base.OnStartup(e);
}
更多信息請參見this excellent post。
什麼對我的作品:
1)在App.xaml中覆蓋OnStartup(),並添加 - System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("et-EE");
2)定義在XAML @窗位 - xmlns:sysglb="clr-namespace:System.Globalization;assembly=mscorlib"
3)在XAML - <TextBox Text="{Binding Path=Price, StringFormat='{}{0:C}', ConverterCulture={x:Static sysglb:CultureInfo.CurrentUICulture}}" />
這正確拿起任何定製區域設置。雖然我在第一步中使用手動創建的CultureInfo,但我確定可以傳入其中一種靜態類型 - 例如。 System.Globalization.CultureInfo.CurrentCulture(我還沒有經過測試......)
我在主窗口中做了Language =「en-GB」,例如
<Window x:Class="AllocateWPF.Vouchers"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Test" Height="692" Width="1000" Language="en-GB">
絕對是您在原型開發窗口時最快捷的方式! – Grim 2015-11-06 10:32:10
拯救生命,我愛你。要在XAML中顯示逗號(意大利文化)的歐元符號和點intead:Language =「it-IT」,然後用「€#,## 0.00」格式化字符串 – 2016-01-29 17:45:59
完美,我花了一個小時試圖找到解決方案,並在5分鐘內解決了問題,謝謝。 – Coesy 2010-05-04 11:17:41
實際上,根據[MS Connect上的這個錯誤報告](https://connect.microsoft.com/VisualStudio/feedback/details/442569/wpf-binding-uses-the-wrong-currentculture-by-default),它不是一個錯誤,而是一個*功能*,因爲MS的狀態......很奇怪的*功能*,我會說,但它可能是很好的知道,這是不太可能「固定」在未來的版本。 – gehho 2010-05-04 13:21:09
儘管(雖然我使用德語,但具有健全的日期格式[ISO 8601]),但它不會選擇區域設置的自定義更改。有沒有解決方法呢? – Joey 2010-12-10 00:48:50