При переносе приложения из .NET 3.5 в .NET 4.0 я столкнулся с этой специфической проблемой.
(культура nl-BE)
Я привязываю TextBox следующим образом (в XAML) в значение DateTime с UpdateSourceTrigger в PropertyChanged (LostFocus работает, как и ожидалось, но требуется проверка по мере ввода):
<TextBox Height="23" Margin="146,0,105,97.04" Name="txb_Geboortedatum" VerticalAlignment="Bottom">
<TextBox.Text>
<Binding Path="Geboortedatum" StringFormat="d"
UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<ExceptionValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Теперь, когда содержимое этого текстового поля (например) 10/12/2000 , и я хочу изменить его на 09/03/1981 Некоторая неприятная автокоррекция происходит , когда я помещаю курсор в конец2000 и начните 'backspacing', удалив значение года (когда только первая цифра ('2') из '2000' автоматически оставит значение - включая переход курсора - снова изменится на 2002).Можно ли отключить эту автокоррекцию?
Кажется, я не могу найти, что конкретно ввело это поведение.Та же «проблема» также возникает с FormatString=c
для значений валюты.
То, что я пробовал до сих пор:
- Изменение FormatString на что-то более явное, например
{0}{dd/MM/yyyy}
(та же проблема: начинается автоматическое исправление, когда для года осталось 2 цифры). Отключение следующего фрагмента, который я добавил в свой файл App.xaml.cs:
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(
CultureInfo.CurrentCulture.IetfLanguageTag)));
Обоснование того, что этот фрагмент должен быть включен в первую очередь: посмотрите на эту ссылку .
Я что-то упускаю здесь очевидное?Я не могу воспроизвести это в 3.5.Мне действительно нужно свернуть свои собственные ValueConverters для того, чтобы заставить это работать должным образом?Это похоже на шаг назад по сравнению с StringFormat
, который был введен в 3.5 sp 1.
Вывод из DateTimeFormatInfo.CurrentInfo.GetAllDateTimePatterns('d')
выглядит немного иначе, хотя ничего, что могло бы сразу объяснить поведение (возможно, не связанное):
.NET 3.5 .NET 4.0
d/MM/yyyy d/MM/yyyy
d/MM/yy d/MM/yy
dd-MM-yy dd-MM-yy
dd.MM.yy dd.MM.yy
yyyy-MM-dd dd.MMM.yyyy
yyyy-MM-dd