WPF StringFormat = {0: C} يظهر بالدولار
-
03-10-2019 - |
سؤال
لماذا هذا السطر من الكود
<TextBlock Text="{Binding Net, StringFormat=c}"/>
إخراج النتيجة $ xx.xx عندما يتم ضبط جميع الإعدادات الإقليمية على المملكة المتحدة. أتوقع أن يخرجه كـ £ xx.xx. أيه أفكار؟ لقد جربت اختلافات مختلفة من StringFormat بما في ذلك StringFormat = {} {0: C} ولكن لا يزال يحصل على نفس النتيجة.
شكرا للنظر.
المحلول
لست متأكدًا مما إذا كان هذا قد تم إصلاحه في .NET 4 ، لكن WPF لم يسبق له مثيل للثقافة الحالية عند تقديم أشياء مثل العملة أو التواريخ. إنه شيء أعتبره إشرافًا هائلاً ، لكن لحسن الحظ يمكن تصحيحه بسهولة.
في فصل التطبيق الخاص بك:
protected override void OnStartup(StartupEventArgs e)
{
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(
XmlLanguage.GetLanguage(
CultureInfo.CurrentCulture.IetfLanguageTag)));
base.OnStartup(e);
}
نرى هذا المنشور الممتاز للمزيد من المعلومات.
نصائح أخرى
أفعل اللغة = "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">
ما الذي يعمل بالنسبة لي:
1) في app.xaml override 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}}" />
هذه بشكل صحيح تلتقط أي العادة الإعدادات الإقليمية. على الرغم من أنني أستخدم تم إنشاؤه يدويًا الثقافة في الخطوة الأولى ، أنا متأكد من أنه من الممكن المرور في أحد الأنواع الثابتة - على سبيل المثال. System.Globalization.CultureInfo.CurrentCulture (لم أختبرها على الرغم من ...)