我正在尝试创建一个自定义控件(继承自TextBox)。用户输入时的主要目标是自动格式化。此coontrol仅接受数字,并使用数字分组分隔符和小数分隔符字符自动完成输入。
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'字符,一切都很好,直到这个:
still good http://oi40.tinypic.com/2lcmxdl.jpg
之后我输入了一个'0'号码并且插入符号错误:
bad http://oi39.tinypic.com/280tjeo.jpg
我希望插入符号接近下一个字符。我想我知道原因。输入从我收到3个字符(默认情况下显示0.00),插入符号位于3.位置。但我想同步这个插入符号。我试图设置CaretIndex和SelectionStart属性,但没有一个工作。
欢迎任何建议。谢谢。
答案 0 :(得分:1)
可能应该使用value converter而不是进行字符串替换
答案 1 :(得分:0)
我在这里解决了这个问题:WPF TextBox Binding with Formatting
这不是完全相同的数字格式,它只是一个包含千位分隔符的数字字符串,它没有小数位,但我确信您可以更改代码以满足您的格式需求。 / p>