创建仅接受数字的WPF TextBox

Ela*_*lad 20 c# wpf textbox

我想创建一个只接受特定范围内的数值的TextBox.实现此类TextBox的最佳方法是什么?

我想到了派生TextBox并覆盖TextProperty的验证和强制.但是,我不知道如何做到这一点,我知道通常不建议派生WPF控件.


编辑:
我需要的是一个非常基本的文本框,过滤掉所有不是数字的按键.实现它的最简单方法是处理TextBox.PreviewTextInput事件:

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的函数)

一些建议的解决方案可能更好,但对于我需要的简单功能,这个解决方案是最容易和最快的,同时足以满足我的需求.

Lar*_*ens 8

到目前为止,我见过的大多数实现都使用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)