Привлекая приложение из .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 года и начинаю "отменять" значение года (когда только первая цифра ( "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