UWP TextBox 中的光标行为异常

Cursor misbehaving in UWP TextBox

假设我有一个数据类型为 float 的 ViewModel 并实现了 INotifyPropertyChanged 接口。

private float Amount;

然后在我的 UI:

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

当我尝试输入字符 .(句点)时,文本光标返回到开头,并在按两次句点后立即出现。是什么导致了这种行为?

我已经在评论中提到的 UpdateSourceTrigger=PropertyChanged 时测试了代码。问题是 PropertyChanged 导致绑定在每次击键后立即更新。因此,当输入不包含有效的 float 时,该行为是完全可以预测的。到目前为止,我已经看到了三种不同的行为。一旦仅输入一个数字并紧接着输入句点,绑定有时会将其转换为小数:

但有时这并没有发生,控件只是让我输入 3.,没有任何变化。这种行为似乎是随机的。关键是设置为后台属性的value然后通过PropertyChanged事件和数据绑定反映在UI中,从而导致文本发生变化和光标跳转。

简单地说,这里的问题是 属性 是 float 而输入接受任何 string。您的问题的解决方案可能是使用 string 属性 进行绑定,例如 AmountText 然后在 setter 中验证文本实际上是有效的 float,解析它并手动设置Amount 属性。通过这种方式,您可以在输入有效输入后立即保留 "immediate" 值更新,同时还可以避免您看到的奇怪行为。

另请查看 WinRTXamlToolkit and its NumericUpDown control,这可能是实现您的目标的更好解决方案,因为它为用户提供了一种自然的输入数值的方式。