回避する必要がある問題があります。特定のイベントが発生すると、TextBox のキャレット位置が最初の文字にリセットされます。私の TextBox の XAML は次のとおりです。私のアプリケーションは MVVM を使用しています。
<TextBox x:Name="txtAmount" Text="{Binding CurrentClientObject.Amount, Mode=TwoWay, StringFormat='###,###,##0.00'}"></TextBox>
モデル プロパティにバインドされています:
private System.Nullable<decimal> _Amount;
[Display(ResourceType = typeof(MatchModelResx), Name = "LabelAmount", Description = "ToolTipAmount")]
public System.Nullable<decimal> Amount
{
get
{
return _Amount;
}
set
{
_Amount = value;
NotifyChanged("Amount");
}
}
TextBox に入力した文字列がモデル内のプロパティの更新をトリガーするたびに、StringFormat が適用され、TextBox 内のキャレットが移動するため、StringFormat がここで問題を引き起こしています。
モデルは失われたフォーカス (UpdateSourceTrigger = Default) で更新されるため、これは問題になりませんが、TextBox がエラー モードの場合があります。ユーザーがカスタム検証規則に違反する値を入力した場合、または無効な形式 (つまり、10 進数にバインドされたフィールドに 64.5x5 を入力した場合) の値を入力した場合、キーを変更するたびにモデル内のプロパティの更新がトリガーされます。また、モデルの更新により StringFormat が適用される可能性があるため、ユーザーが TextBox の無効な値を修正しようとしている間、キャレットが左に移動することを意味します。これはお客様にとって苛立たしい行為であり、回避する方法を見つける必要があります。
stringformat の代わりにバインディングでカスタム コンバーターを使用してみましたが、問題は解決しません。また、コードがプロパティ Set に到達する前に例外が発生することがあるため、キャレットが移動する前にこれを処理する方法がありません。
Silverlight 5 はこれを回避する方法を提供していますか?
ありがとう!