カスタム コントロール (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 プロパティを設定しようとしましたが、どれも機能しませんでした。
どんな提案でも大歓迎です。ありがとうございました。