我正在尝试创建一个自定义控件(从 TextBox 继承)。主要目标是在用户键入时自动格式化。此控件仅接受数字,并使用数字分组分隔符和小数分隔符自动完成输入。
Generic.xaml 内容如下:
<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>
和 TextContent 属性:
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;
}
}
}
}
它工作得很好,除了一件事。插入符号...我输入了一个“0”字符,在此之前一切都很好:
之后我又输入了一个“0”数字,插入符号在错误的位置:
我希望在下一个字符附近出现插入符号。我想我知道原因。输入从我那里收到 3 个字符(默认显示 0.00),插入符号位于 3. 位置。但我想同步这个插入符号。我试图设置 CaretIndex 和 SelectionStart 属性,但它们都不起作用。
欢迎任何建议。谢谢你。