Подтвердить что ты не робот

Член "CurrentCulture" не распознается или недоступен

У меня есть окно со следующим пространством имен

xmlns:sysglb="clr-namespace:System.Globalization;assembly=mscorlib"

который содержит текстовое поле

<TextBox Text="{Binding Path=Price, Mode=TwoWay, StringFormat='C',
                 ConverterCulture={x:Static sysglb:CultureInfo.CurrentCulture}}"
                MaxLines="1" TextAlignment="Right"/>

как Ответ Гусдора на StringFormat Проблемы локализации в wpf, который отлично работает, но теперь Visual Studio ( 2013) дает мне "Invalid Markup" - член "CurrentCulture" не распознан или недоступен.

Intellisense распознает и запрашивает sysglb: CultureInfo.CurrentCulture, но как только я отхожу от текстового поля, я получаю ошибку.

Может ли какая-то душа посоветовать, почему это происходит и что я делаю, чтобы исправить это? Также как редактор XAML удается распознать sysglb: CultureInfo.CurrentCulture, но разметка не работает?

Приветствия Geoff

4b9b3361

Ответ 1

Не могу вспомнить, откуда я получил это, но работает

using System.Globalization;
using System.Windows.Data;

namespace SomeNamespace
{
    /// <summary>
    /// This class is a fudge because
    /// 
    ///         xmlns:sysglb="clr-namespace:System.Globalization;assembly=mscorlib"
    ///         
    ///         <TextBox Grid.Row="2" Grid.Column="1" 
    ///              Text="{Binding Path=SelectedSupporterCategory.Price, Mode=TwoWay, StringFormat='C',
    ///              ConverterCulture={x:Static sysglb:CultureInfo.CurrentCulture}}" 
    ///              UseLayoutRounding="True" MaxWidth="100" HorizontalAlignment="Left" MinWidth="100" HorizontalContentAlignment="Right"/>
    /// 
    ///     is giving 
    ///             Error 29    "The member "CurrentCulture" is not recognized or is not accessible."
    /// 
    /// Instead we use
    /// 
    ///         <TextBox Grid.Row="2" Grid.Column="1" 
    ///              Text="{CultureAwareBinding Path=SelectedSupporterCategory.Price, Mode=TwoWay, StringFormat='C',}" 
    ///              UseLayoutRounding="True" MaxWidth="100" HorizontalAlignment="Left" MinWidth="100" HorizontalContentAlignment="Right"/>
    /// 
    /// </summary>
    public class CultureAwareBinding : Binding
    {
        public CultureAwareBinding()
        {
            ConverterCulture = CultureInfo.CurrentCulture;
        }
    }
}

Ответ 2

Изменение целевой среды проекта до .NET Framework 4.6 или выше решает проблему.

Перейдите в проводник решений и щелкните правой кнопкой мыши по затронутой структуре Project → Properties → Application → Target.

Ответ 3

найдено аналогичное предложение в этом разделе: WPF StringFormat = {0: C}, показывающий как доллары

мое приложение работало, когда я запустил его и запустил значения с правильным форматированием культуры, но дизайнер не смог найти CultureInfo.CurrentUICulture и разбился

Я использовал статическое свойство в вспомогательном классе

public static class WpfHelpers
{
    public static CultureInfo CurrentCulture { get; set; }
}

и использовал его в привязках: ConverterCulture={x:Static helpers:WpfHelpers.CurrentCulture}

Я установил это свойство при запуске приложения

WpfHelpers.CurrentCulture =
Thread.CurrentThread.CurrentCulture =
Thread.CurrentThread.CurrentUICulture = new CultureInfo ...