سؤال

لماذا هذا السطر من الكود

<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 (لم أختبرها على الرغم من ...)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top