WPF StringFormat = {0: C} отображается в долларах - PullRequest
40 голосов
/ 04 мая 2010

Почему эта строка кода

<TextBlock Text="{Binding Net, StringFormat=c}"/>

Выведите результат в виде $ xx.xx, когда все мои региональные настройки установлены на UK. Я ожидаю, что это выведет это как £ xx.xx. Есть идеи? Я пробовал разные варианты форматирования строки, включая StringFormat = {} {0: C}, но все равно получаю тот же результат.

Спасибо за внимание.

Ответы [ 3 ]

65 голосов
/ 04 мая 2010

Я не уверен, было ли это исправлено в .NET 4, но WPF никогда не использовал текущую культуру при рендеринге таких вещей, как валюта или даты. Я считаю это серьезным упущением, но, к счастью, это легко исправить.

В вашем классе приложений:

protected override void OnStartup(StartupEventArgs e)
{
    FrameworkElement.LanguageProperty.OverrideMetadata(
        typeof(FrameworkElement),
        new FrameworkPropertyMetadata(
            XmlLanguage.GetLanguage(
            CultureInfo.CurrentCulture.IetfLanguageTag)));
    base.OnStartup(e);
 }

См. этот отличный пост для получения дополнительной информации.

26 голосов
/ 23 сентября 2013

Я делаю 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">
16 голосов
/ 24 августа 2012

Что у меня работает:
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 (хотя я не проверял это ...)

...