我想创建一个只接受特定范围内的数值的TextBox.实现此类TextBox的最佳方法是什么?
我想到了派生TextBox并覆盖TextProperty的验证和强制.但是,我不知道如何做到这一点,我知道通常不建议派生WPF控件.
private void textBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
int result;
if (!validateStringAsNumber(e.Text,out result,false))
{
e.Handled = true;
}
}
Run Code Online (Sandbox Code Playgroud)
(validateStringAsNumber是我主要使用Int.TryParse的函数)
一些建议的解决方案可能更好,但对于我需要的简单功能,这个解决方案是最容易和最快的,同时足以满足我的需求.
到目前为止,我见过的大多数实现都使用PreviewTextInput事件来实现正确的掩码行为.这个继承自TextBox,这个使用附加属性.两者都使用.Net的MaskedTextProvider来提供正确的掩码行为,但是如果你只想要一个简单的"仅限数字"文本框,则不需要这个类.
小智 5
private void txt_TextChanged(object sender, TextChangedEventArgs e)
{
TextBox textBox = sender as TextBox;
int iValue = -1;
if (Int32.TryParse(textBox.Text, out iValue) == false)
{
TextChange textChange = e.Changes.ElementAt<TextChange>(0);
int iAddedLength = textChange.AddedLength;
int iOffset = textChange.Offset;
textBox.Text = textBox.Text.Remove(iOffset, iAddedLength);
}
}
Run Code Online (Sandbox Code Playgroud)