C# 插入符号在WPF自定义文本框控件中的位置错误
我正在尝试创建一个自定义控件(从TextBox继承)。主要目标是用户键入时自动格式化。此控件仅接受数字,并使用数字分组分隔符和十进制分隔符自动完成输入 Generic.xaml的内容如下:C# 插入符号在WPF自定义文本框控件中的位置错误,c#,.net,wpf,wpf-controls,custom-controls,C#,.net,Wpf,Wpf Controls,Custom Controls,我正在尝试创建一个自定义控件(从TextBox继承)。主要目标是用户键入时自动格式化。此控件仅接受数字,并使用数字分组分隔符和十进制分隔符自动完成输入 Generic.xaml的内容如下: <Style TargetType="{x:Type local:PrecisionTextBox}"> <Setter Property="Template"> <Setter.Value>
<Style TargetType="{x:Type local:PrecisionTextBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:PrecisionTextBox}">
<TextBox Text="{Binding Path=TextContent, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
除了一件事,它工作得很好。插入符号。。。我键入了一个“0”字符,在此之前一切正常:
之后,我又键入了一个“0”号,插入符号出现在错误的位置:
我希望插入符号靠近下一个角色。我想我知道原因。输入接收到我的3个字符(默认显示为0.00),插入符号为3。位置。但我想同步这个插入符号。我试图设置CaretIndex和SelectionStart属性,但它们都不起作用
欢迎提出任何建议。谢谢。可能您应该使用而不是进行字符串替换我在这里解决了这个问题:
这并不适用于完全相同的数字格式,它只适用于带有千个分隔符的数字字符串,它没有小数位数,但我相信您可以更改代码以满足您的格式要求
public string TextContent
{
get
{
return this.Value.ToString("N" + Precision);
}
set
{
if (value != textContent)
{
textContent = value;
if (textContent.Contains(MultiplierChar))
{
textContent = textContent.Replace(MultiplierChar, "000000");
}
try
{
if (!string.IsNullOrEmpty(textContent))
{
this.Value = Convert.ToDecimal(textContent);
}
}
catch
{
this.Value = 0m;
}
}
}
}