Сбой в работе курсора в UWP TextBox - PullRequest
0 голосов
/ 16 мая 2018

Допустим, у меня есть ViewModel с типом данных float и реализующий интерфейс INotifyPropertyChanged.

private float Amount;

А потом в моем интерфейсе:

<TextBox Text="{x:Bind Amount, Mode=TwoWay}" />

Что происходит, когда я пытаюсь набрать символ . (точка), текстовый курсор возвращается к началу и появляется сразу после двух нажатий точки. Что может быть причиной такого поведения?

1 Ответ

0 голосов
/ 16 мая 2018

Я проверял код, когда UpdateSourceTrigger=PropertyChanged, как указано в комментариях.Проблема в том, что PropertyChanged заставляет привязку обновляться сразу после каждого нажатия клавиши.Из-за этого поведение вполне предсказуемо, когда входные данные не содержат действительный float.До сих пор я видел три разных поведения.После ввода только одной цифры и периода после этого привязка иногда преобразует ее в десятичную:

Conversion

Но иногда этого не происходит, иконтроль просто позвольте мне ввести 3. без каких-либо изменений.Поведение кажется действительно случайным.Ключевым моментом является то, что value, установленное для свойства backing, затем отражается в пользовательском интерфейсе благодаря событию PropertyChanged и привязке данных, что приводит к изменению текста и прыжку курсора.

ПростоТем не менее, проблема здесь заключается в том, что свойство имеет значение float, а вход принимает любое значение string.Решением вашей проблемы может быть использование свойства string для привязки, например AmountText, а затем в установщике убедитесь, что текст действительно является допустимым float, проанализируйте его и вручную установите свойство Amount.Таким образом, вы сохраните «немедленное» обновление значения, как только будет введен правильный ввод, а также избежите странного поведения, которое вы видите.

Также проверьте WinRTXamlToolkit и NumericUpDown control , который может быть лучшим решением для вашей цели, поскольку предоставляет естественный способ ввода числовых значений пользователем.

...