多くの人と同じように、WPF で数値テキスト ボックス コントロールを作成する必要があります。これまでのところ順調に進んでいますが、次のステップに向けてどのようなアプローチが適切かはわかりません。
コントロールの仕様の一部として、常に数値を表示する必要があります。ユーザーがすべてのテキストを強調表示し、バックスペースまたは削除をタップした場合、値が「空白」ではなくゼロに設定されていることを確認する必要があります。WPF コントロール モデルでこれを行うにはどうすればよいですか?
私がこれまでに持っているもの(省略):
public class PositiveIntegerTextBox : TextBox
{
protected override void OnPreviewTextInput(System.Windows.Input.TextCompositionEventArgs e)
{
// Ensure typed characters are numeric
}
protected override void OnPreviewDrop(DragEventArgs e)
{
// Ensure the dropped text is numeric.
}
protected override void OnTextChanged(TextChangedEventArgs e)
{
if (this.Text == string.Empty)
{
this.Text = "0";
// Setting the Text will fire OnTextChanged again--
// Set Handled so all the other handlers only get called once.
e.Handled = true;
}
base.OnTextChanged(e);
}
private void HandlePreviewExecutedHandler(object sender, ExecutedRoutedEventArgs e)
{
// If something's being pasted, make sure it's numeric
}
}
一方では、これは単純で、問題なく動作するようです。ただし、テキストをゼロにリセットする前に、常に(非常に簡単に)テキストを空白に設定しているため、それが正しいかどうかはわかりません。ただし、値が変更される前に値を操作できる PreviewTextChanged イベントはないため、これが私の最善の推測です。
それが正しいか?