WPF TextBox带StringFormat输入问题:如何绕过小数点覆盖小数位?
WPF TextBox保留两位小数输入异常的解决方法
你遇到的问题是因为StringFormat='{}{0:F2}'是绑定的显示格式化规则,当输入过程中实时触发绑定更新(默认UpdateSourceTrigger=PropertyChanged)时,输入内容会和格式化后的内容叠加,导致出现重复小数点。不用写复杂的后台输入处理,有几种更简便的实现方式:
修改绑定的更新时机
把绑定的UpdateSourceTrigger设为LostFocus,这样只有当TextBox失去焦点时才会应用格式化规则,输入过程中可以正常输入数字和小数点,不会出现叠加问题。绑定写法示例:<TextBox Text="{Binding YourDecimalProperty, StringFormat='{}{0:F2}', UpdateSourceTrigger=LostFocus}" />使用掩码控件限制输入格式
用WPF Toolkit中的MaskedTextBox(需添加对应库引用),设置掩码为0.00,输入时会强制按照两位小数的格式输入,从根源上避免非法输入和格式叠加问题。示例:<xctk:MaskedTextBox Mask="0.00" Value="{Binding YourDecimalProperty}" />延迟绑定更新(适合实时格式化需求)
如果需要实时看到格式化效果,给绑定添加Delay属性,让绑定延迟几百毫秒再更新,等用户输入动作暂停后再应用格式化,减少冲突。示例:<TextBox Text="{Binding YourDecimalProperty, StringFormat='{}{0:F2}', UpdateSourceTrigger=PropertyChanged, Delay=500}" />
内容的提问来源于stack exchange,提问作者user11719716
相关产品推荐
相关产品推荐

