WPF文本框中的奇怪问题stringformat - 光标向后移动

时间:2010-05-17 19:26:18

标签: wpf data-binding

我正在使用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 个答案:

答案 0 :(得分:10)

我将UpdateSourceTrigger更改回LostFocus的默认值(对于TextBox)。

通过将其设置为PropertyChanged,您每次用户键入字符时都会强制进行验证和字符串格式。这会导致非常奇怪的行为,例如你所看到的。

如果您将其保留为默认值(或明确将其设置回LostFocus),则在用户完成键入时将进行格式化+验证。这将消除StringFormat插入新字符时发生的奇怪问题,验证中断部分,以及使用PropertyChanged将遇到的其他问题。

答案 1 :(得分:1)

您可以使用此字符串格式,它将解决此问题

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

您的代码应该是

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

答案 2 :(得分:0)

此问题已在.NET 4.5中修复。对于.NET 4,我不得不删除StringFormat以保持UpdateSourceTrigger = PropertyChanged