Член "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
Ответы
Ответ 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 ...