C# WPF文本框在使用退格按钮删除小数时表现不佳
我是WPF的新手,目前正在做一个关于十进制值的会计基础项目。使用退格键删除十进制值时出现问题 起初我只输入了10位数字,但当我试图从最后一位数字中删除时,比如说从(____;u0.00)中,我无法删除。它正在删除两个0并再次添加两个0 只有当我键入的数字超过10位时,才会出现此问题 图1: 图2: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
//文本框代码
//更改了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.