У меня есть следующий код XAML:Почему я не могу использовать CultureInfo.CurrentCulture в XAML во время разработки?
<TextBlock Text="{Binding Source={x:Static s:DateTime.Now}, StringFormat=Date: {0:dddd, MMMM dd}}"/>
s:DateTime.Now
с xmlns:s="clr-namespace:System;assembly=mscorlib"
отлично работает во время выполнения, а также в режиме разработки (Visual Studio 2015 Enterprise).
Но если попробовать то же самое с CultureInfo.CurrentCulture
, то работает только на время выполнения и дает мне ошибку в режиме конструктора (xmlns:c="clr-namespace:System.Globalization;assembly=mscorlib"
):
<TextBlock Text="{Binding Source={x:Static s:DateTime.Now}, ConverterCulture={x:Static c:CultureInfo.CurrentCulture}, StringFormat=Date: {0:dddd, MMMM dd}}"/>
Я не искал обходной путь. Я только пытаюсь понять разницу между DateTime.Now
и CultureInfo.CurrentCulture
и почему один из них работает, а другой нет.
Какая ошибка дает вам? Вы уверены, что разница между 'DateTime.Now' и' CultureInfo.CurrentCulture', а не разница между 'Source' и' ConverterCulture'? (Нечетный, как и было бы, попробуйте указать «Source» как «CultureInfo.CurrentCulture», просто чтобы узнать, все еще выдаст ошибку.) –
Я копирую/вставляю два бита XAML, которые вы разделили в пустой проект, и он отлично работает , как в режиме разработки, так и во время выполнения. Пожалуйста, предоставьте хороший [mcve], который надежно воспроизводит проблему. Пожалуйста, также уточните, какая у вас проблема; укажите текст сообщения об ошибке _exact_ и контекст, в котором происходит ошибка. –
Он воспроизводит проблему на моем конце. Я также пробовал, что предложил @JonSkeet, и проблема действительно 'CurrentCulture'. Кстати, документация CurrentCulture гласит: «Объект, представляющий культуру, используемую текущим потоком». Разве это не проблема? То, что во время разработки нет «текущей нити». 'DefaultThreadCurrentCulture',' InstalledUICulture', 'InvariantCulture' и' DefaultThreadCurrentUICulture' работают нормально. Только «CurrentCulture» и «CurrentUICulture» действуют. –