0

我正在尝试创建一个自定义控件(从 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 属性,但它们都不起作用。

欢迎任何建议。谢谢你。

4

2 回答 2

1

可能您应该使用值转换器而不是进行字符串替换

于 2013-09-14T03:09:47.960 回答
0

我在这里解决了这个问题:WPF TextBox Binding with Formatting

这不是完全相同的数字格式,它只是一个带有千位分隔符的数字字符串,它没有小数位,但我相信您可以更改代码以满足您的格式需求。

于 2013-11-30T18:47:59.817 回答