C#WPF如何在文本框中仅使用数值

C#WPF如何在文本框中仅使用数值,c#,wpf,events,numeric,C#,Wpf,Events,Numeric,我使用一个WPF应用程序,我只允许文本框中有数字。在WindowsForm应用程序中,我知道我必须如何实现它。 不幸的是,WPF中没有按键,“代码”也不再起作用 它是如何正确的?事件是什么 在这里,您可以看到在Windows窗体中运行的旧代码: private void tbKreisdurchmesser_KeyPress(object sender, KeyEventArgs e) { if (char.IsNumber(e.Key) || e.KeyChar==".")

我使用一个WPF应用程序,我只允许文本框中有数字。在WindowsForm应用程序中,我知道我必须如何实现它。
不幸的是,WPF中没有按键,“代码”也不再起作用

它是如何正确的?事件是什么


在这里,您可以看到在Windows窗体中运行的旧代码:

private void tbKreisdurchmesser_KeyPress(object sender, KeyEventArgs e)
{
    if (char.IsNumber(e.Key) || e.KeyChar==".")
    {

    }
    else
    {
        e.Handled = e.KeyChar != (char)Keys.Back;
    }
}

您可以为textbox添加PreviewTestInput事件,并使用正则表达式验证该事件中的值

private void TextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
    var textBox = sender as TextBox;
    e.Handled = Regex.IsMatch(e.Text, "[^0-9]+");
}

您可以为textbox添加PreviewTestInput事件,并使用正则表达式验证该事件中的值

private void TextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
    var textBox = sender as TextBox;
    e.Handled = Regex.IsMatch(e.Text, "[^0-9]+");
}

尝试按preview键向下您可以简单地将文本绑定到视图模型中的数字类型(例如,
double
)。其次,在绑定到数字类型时,您需要将属性、双向模式和UpdateSourceTrigger指定为PropertyChanged,然后在setter中调用PropertyChanged。这也很酷,因为当文本字段无效时,它会在文本字段上着色。请尝试按preview键向下。您只需将文本绑定到视图模型中的数字类型(例如
double
)。其次,绑定到数字类型时,您需要将属性、双向模式和UpdateSourceTrigger指定为PropertyChanged,然后在setter中,调用PropertyChanged。这也很酷,因为当文本字段无效时,它会在文本字段上着色。这是从该方法复制的答案,不处理空格键。这是从该方法复制的答案,不处理空格键。