WPF文本框stringformat出现奇怪问题 - 光标会后退

4

我是使用 WPF 4.0 中的 TextBox 和数据绑定。使用 StringFormat 将数字格式化为货币形式。XAML 如下所示:

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

除了一种奇怪的行为之外,一切似乎都正常:例如,当用户在键入1后立即键入12时,文本框中的值变为$1.00,奇怪的是光标被移动到$和1之间。所以当用户只是输入12时,结果变成$21.00。
我该如何修复这个奇怪的行为?
3个回答

11

我建议将你的UpdateSourceTrigger更改回默认值(对于TextBox而言,默认值为LostFocus)。

如果把它设置为PropertyChanged,你会强制在用户每输入一个字符时运行验证和字符串格式化,这会导致非常奇怪的行为,例如你当前遇到的问题。

如果保持默认值(或明确将其设置回LostFocus),当用户完成完全输入后将进行格式化和验证。这将消除使用PropertyChanged时出现的StringFormat插入新字符、验证中断等问题。


6
当一个按钮的IsDefault属性被设置为true时,你输入一个值然后按下回车键,会发生什么呢?通常情况下,该值不会被提交,你刚刚输入的内容也会丢失。 - Caleb Vear

1

你可以使用这个字符串格式,它会解决这个问题。

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

你的代码应该长这样

<TextBox Text="{Binding Path=ValueProperty, ValidatesOnDataErrors=True, ValidatesOnExceptions=True, StringFormat=$###\,##0.0##, UpdateSourceTrigger=PropertyChanged}">
</TextBox>

0
这个问题在.NET 4.5中已经修复。对于.NET 4,我不得不移除StringFormat以保持UpdateSourceTrigger=PropertyChanged。

我们仍然在使用.NET 4.5.2时遇到了这个问题,甚至测试了.NET 4.6.1....但没有运气! - SiL3NC3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接