странная проблема с форматированием строки WPF Textbox - курсор перемещается назад - PullRequest
3 голосов
/ 17 мая 2010

Я использую WPF 4.0 TextBox и привязку. Я использую StringFormat для форматирования числа в качестве валюты. XAML выглядит так:

<TextBox Text="{Binding Path=ValueProperty, ValidatesOnDataErrors=True, ValidatesOnExceptions=True, StringFormat={}{0:C}, UpdateSourceTrigger=PropertyChanged}">
</TextBox>

Кажется, все работает правильно, за исключением странного поведения: Когда, например, пользователь вводит 12: сразу после ввода 1, значение в текстовом поле становится $ 1,00, и странная вещь - курсор перемещается между $ и 1. Поэтому, когда пользователь просто набирает 12, результат становится $ 21,00.

Как я могу исправить это странное поведение?

Ответы [ 3 ]

10 голосов
/ 17 мая 2010

Я бы изменил ваш UpdateSourceTrigger обратно на значение по умолчанию (для TextBox) LostFocus.

Установив значение PropertyChanged, вы заставляете свою проверку и формат строки запускаться каждый раз, когда пользователь вводит символ. Это вызывает очень странное поведение, например то, что вы видите.

Если вы оставите его по умолчанию (или явно установите его обратно в LostFocus), форматирование + проверка произойдет, когда пользователь полностью завершит набор текста. Это устранит странные проблемы, возникающие при вставке новых символов в StringFormat, непроверении проверки и других проблемах, с которыми вы столкнетесь при использовании PropertyChanged.

1 голос
/ 20 ноября 2012

вы можете использовать этот формат строки, это решит эту проблему

"$###\,##0.0##"

ваш код должен выглядеть как

<TextBox Text="{Binding Path=ValueProperty, ValidatesOnDataErrors=True, ValidatesOnExceptions=True, StringFormat=$###\,##0.0##, UpdateSourceTrigger=PropertyChanged}">
</TextBox>
0 голосов
/ 23 апреля 2014

Эта проблема была исправлена ​​в .NET 4.5. Для .NET 4 мне пришлось удалить StringFormat, чтобы сохранить UpdateSourceTrigger = PropertyChanged

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...