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;
                }
            }
        }
    }

1つのことを除いて、うまく機能します。キャレット...「0」文字を入力しましたが、これまではすべて問題ありません。

まだいい

その後、もう1つ「0」の数字を入力しましたが、キャレットが間違った場所にあります:

悪い

次の文字の近くにキャレットがあると思います。その理由はわかっていると思います。入力は私から 3 文字を受け取り (デフォルトでは 0.00 と表示されます)、キャレットは 3 番目の位置にあります。しかし、私はこのキャレットを同期したいです。CaretIndex および SelectionStart プロパティを設定しようとしましたが、どれも機能しませんでした。

どんな提案でも大歓迎です。ありがとうございました。

4

2 に答える 2

1

文字列内置換を行う代わりに、値コンバーターを使用する必要があるかもしれません

于 2013-09-14T03:09:47.960 に答える