如何仅通过XAML为TextBox添加数字千位分隔符且不使用绑定与代码
可行实现方案
方案1:原生TextBox实现(无后台代码、无额外业务数据绑定)
你原有代码的问题是Binding未指定绑定源与路径,StringFormat仅在绑定到有效数值时才会生效。以下是仅XAML的配置方案,通过自绑定+失焦触发更新实现千位分隔,不需要额外定义ViewModel或后台逻辑:
<TextBox x:Name="text_main2" VerticalAlignment="Top" Width="303"> <TextBox.Text> <Binding Path="Text" RelativeSource="{RelativeSource Self}" UpdateSourceTrigger="LostFocus" StringFormat="{}{0:N0}"/> </TextBox.Text> </TextBox>
效果:输入数字时无格式干扰,失去焦点后自动转换为带千位分隔符的格式,支持任意长度的合法整数。
方案2:XCTK MaskedTextBox实现
你原有代码的问题是写死了固定长度的Mask属性,无法适配任意长度的数字。我们可以通过指定数值类型+格式化字符串的方式实现动态千位分隔,不需要写死Mask长度:
- 首先在你的页面根节点(Window/UserControl)头部引入系统命名空间:
xmlns:sys="clr-namespace:System;assembly=mscorlib" - 替换MaskedTextBox代码如下:
<xctk:MaskedTextBox ValueType="{x:Type sys:Int64}" FormatString="N0" PromptChar=" " x:Name="txtname" HorizontalContentAlignment="Right" HorizontalAlignment="Left" Height="22" Margin="512,296,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="152"/>
效果:输入过程中会实时自动插入千位分隔符,体验更流畅。
两种方案都无需编写后台业务代码,仅通过XAML配置即可实现需求。
内容的提问来源于stack exchange,提问作者user14953869
相关产品推荐
相关产品推荐

