C# WPF文本框与stringformat 0:N2的反应异常

C# WPF文本框与stringformat 0:N2的反应异常,c#,wpf,textbox,string-formatting,C#,Wpf,Textbox,String Formatting,这很难解释,所以请看下面的WPF gif- 我有一个stringformat{0:N2}的文本框,它绑定到一个属性 这里有两个问题- 1当按下十进制键时,会添加另一个十进制 2在退格过程中,删除十进制数字后-插入符号不会跳过十进制,而是开始将“00”添加到数字本身 我为第1点做了变通- private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Decimal) {

这很难解释,所以请看下面的WPF gif-

我有一个stringformat{0:N2}的文本框,它绑定到一个属性

这里有两个问题-

1当按下十进制键时,会添加另一个十进制

2在退格过程中,删除十进制数字后-插入符号不会跳过十进制,而是开始将“00”添加到数字本身

我为第1点做了变通-

private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Decimal)
    {
        e.Handled = true;
        ((TextBox)sender).CaretIndex += 1;
    }
}
如果有更好的方法在应用程序中处理这些事情-请一定让我知道

现在,我如何处理第二个问题?我尝试实现的解决方法是-如果达到小数点,请处理按键并移动插入符号位置。不确定这是否是一个好的解决方案,如果是,如何知道何时达到小数点


将插入符号索引与文本框值的长度进行比较,只是为了知道它是否已达到小数点,这似乎有些过头了。这两个问题的正确解决方案是什么?

问题是由于将stringformat应用于值时引起的

这是从绑定源返回的值,即绑定字符串属性到目标文本框文本的值

它链接到TextProperty的元数据

Textbox TextProperty双向绑定,这是在该依赖项属性的元数据中设置的

文本框的默认行为是在控件失去焦点时将值复制到绑定源

如果使用该格式,则在用户完成编辑后应用n2格式。他们可以用零和小数点修正任何他们喜欢的内容,并且只有当他们离开时,格式才会被应用

相反,如果在绑定中设置UpdateSourceTrigger=PropertyChanged,则会发现其行为异常。这是因为用户键入一个字母,整个值被传输到绑定属性,该属性通知控件它已更改。 在应用格式时,会发生各种奇怪的不好的事情


可能这是一个边缘情况,不管是谁构建了文本框,都没有考虑。

我猜想你的绑定中有UpDeaseUrthTeks=属性更改。如果你删除它,文本框的行为会更像你想要的吗?哦,哇!是的,去掉它,它就正常了。将sourcetrigger更改为lostfocus,因为它仍然提供我需要的行为。为什么“PropertyChanged”会让它变成这样?另外,如果你能把它作为一个答案,我会接受它作为一个解决方案。