c# - 如何让 TextBox 仅接受 WPF 中的数字输入?

标签 c# wpf xaml textbox numericupdown

我希望接受数字和小数点,但没有符号。

我查看了使用 Windows 窗体的 NumericUpDown 控件的示例,以及 this sample of a NumericUpDown custom control from Microsoft .但到目前为止,NumericUpDown(是否受 WPF 支持)似乎不会提供我想要的功能。按照我的应用程序的设计方式,任何头脑正常的人都不会想要弄乱箭头。在我的应用程序上下文中,它们没有任何实际意义。

所以我正在寻找一种简单的方法来使标准 WPF TextBox 只接受我想要的字符。这可能吗?实用吗?

最佳答案

添加预览文本输入事件。像这样:<TextBox PreviewTextInput="PreviewTextInput" /> .

然后在里面设置e.Handled如果不允许使用文本。 e.Handled = !IsTextAllowed(e.Text);

我在 IsTextAllowed 中使用了一个简单的正则表达式方法来查看我是否应该允许他们输入的内容。在我的例子中,我只想允许数字、点和破折号。

private static readonly Regex _regex = new Regex("[^0-9.-]+"); //regex that matches disallowed text
private static bool IsTextAllowed(string text)
{
    return !_regex.IsMatch(text);
}

如果您想防止粘贴不正确的数据,请连接 DataObject.Pasting事件 DataObject.Pasting="TextBoxPasting"如图here (代码摘录):

// Use the DataObject.Pasting Handler 
private void TextBoxPasting(object sender, DataObjectPastingEventArgs e)
{
    if (e.DataObject.GetDataPresent(typeof(String)))
    {
        String text = (String)e.DataObject.GetData(typeof(String));
        if (!IsTextAllowed(text))
        {
            e.CancelCommand();
        }
    }
    else
    {
        e.CancelCommand();
    }
}

关于c# - 如何让 TextBox 仅接受 WPF 中的数字输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1268552/

相关文章:

wpf - 像素着色器效果示例

c# - 想要 C# 程序启动 WPF 应用程序

c# - 如何从 wpf 中的代码隐藏更改控件的 Grid.Row 和 Grid.Column

c# - 如何在 xaml 和 resx 中使用 GNU gettext

c# - 检查日期范围是否在日期范围内

c# - 尝试使用 SharpSVN 结账时出现错误

c# - 如何从 ASP.Net OpenID Connect OWIN 组件设置声明?

c# - 是否有必要关闭/处置 SafeHandles

c# - 在运行时从以编程方式创建的 UserControl 中检索 XAML

c++ - 使用 C++/CX for Desktop Windows 的 XAML 应用程序