Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF文本框在使用退格按钮删除小数时表现不佳_C#_.net_Wpf - Fatal编程技术网

C# WPF文本框在使用退格按钮删除小数时表现不佳

C# WPF文本框在使用退格按钮删除小数时表现不佳,c#,.net,wpf,C#,.net,Wpf,我是WPF的新手,目前正在做一个关于十进制值的会计基础项目。使用退格键删除十进制值时出现问题 起初我只输入了10位数字,但当我试图从最后一位数字中删除时,比如说从(____;u0.00)中,我无法删除。它正在删除两个0并再次添加两个0 只有当我键入的数字超过10位时,才会出现此问题 图1: 图2: //文本框代码 //更改了notify属性的模型 [显示(Name=“Tax2%”] [范围(0.00,100.00)] [DisplayFormat(DataFormatString=“{0:N2

我是WPF的新手,目前正在做一个关于十进制值的会计基础项目。使用退格键删除十进制值时出现问题

起初我只输入了10位数字,但当我试图从最后一位数字中删除时,比如说从(____;u0.00)中,我无法删除。它正在删除两个0并再次添加两个0

只有当我键入的数字超过10位时,才会出现此问题

图1: 图2:

//文本框代码
//更改了notify属性的模型
[显示(Name=“Tax2%”]
[范围(0.00,100.00)]
[DisplayFormat(DataFormatString=“{0:N2}”,ApplyFormatInEditMode=true)]
[必需]
公共十进位税2%
{
获取{return\u tax2percent;}
设置
{
_TAX2%=价值;
验证属性(值);
基础。NotifyPropertyChanged(名称(Tax2Percent));
}
}
//数字验证
private void NumberValidationTextBox(对象发送者,文本组合目标)
{
正则表达式正则表达式=新正则表达式(“[^0-9]+”);
e、 Handled=regex.IsMatch(e.Text);
}
这里的问题是,每次键入字符时,它都会触发集合{}和属性更改,这会导致文本框更新并触发StringFormat=N2,这会导致文本框格式化十进制字符串

我现在能想到的唯一解决方案是将UpdateSourceTrigger更改为

UpdateSourceTrigger = LostFocus //so that it only trigger the update once the textbox lost focus
//the validation will only trigger once it lost focus, which is better then sudden lag when
//typing due to validation fail.

ValidateProperty在做什么?顺便说一句,您正在为每个键入的键创建一个新的正则表达式。。。如果正则表达式始终相同,请在类中声明它…我使用验证检查空条目并通知数据模型的更改。即使删除正则表达式,我仍然面临相同的问题您的建议仍然有效,但我需要在流中进行格式化…是否可能。是,还原已更改的属性,而不是LostFocus。在@Paventhan中添加一个延迟,您能否进一步说明需要在流程中进行格式化的原因/情况?这样我就可以设计出更好的解决方案u@pengMiao感谢您的回复,我的项目是一种库存管理,它也处理产品价格。虽然验证工作正常,但我希望我的UI良好。因为我不是专业人士,所以我正在使用google和stackoverflow来学习和开发我的WPF项目。如果你能帮我解决这个问题,那就太好了。@Paventhan hard,因为这是textbox与stringformat的错误行为问题。c和
Text="{Binding Path=Tax2Percent, StringFormat=N2, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged
UpdateSourceTrigger = LostFocus //so that it only trigger the update once the textbox lost focus
//the validation will only trigger once it lost focus, which is better then sudden lag when
//typing due to validation fail.