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,这可能是实现您的目标的更好解决方案,因为它为用户提供了一种自然的输入数值的方式。
假设我有一个数据类型为 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,这可能是实现您的目标的更好解决方案,因为它为用户提供了一种自然的输入数值的方式。