WPF的DataGrid中只能输入数字的列

在WPF的DataGrid中,如何确保某一列只能接受数字输入?本文分享了两种解决方案:一是通过扩展DataGridTextColumn创建NumericTextColumn类;二是利用模板并在后台代码中设置。虽然可以通过绑定字符串格式限制显示,但这并不能阻止用户输入非数字字符。推荐使用前两种方法,它们能有效限制输入并便于代码复用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做一个WPF小程序,需要在DataGrid中的某列限制用户只能输入数字。在网上找了找,看到一些解决方法,最后是stackoverflow上的一个页面上的方法觉得不错,特拿来与大家分享。

方法一:从DataGridTextColumn扩展一个类:NumericTextColumn,代码如下:

复制代码

public class NumericTextColumn : DataGridTextColumn
{
    protected override object PrepareCellForEdit(FrameworkElement editingElement, RoutedEventArgs editingEventArgs)
    {
        var edit = editingElement as TextBox;
        edit.PreviewTextInput += Edit_PreviewTextInput;
        DataObject.AddPastingHandler(edit, OnPaste);
        return base.PrepareCellForEdit(editingElement, editingEventArgs);
    }

    private void OnPaste(object sender, DataObjectPastingEventArgs e)
    {
        var data = e.SourceDataObject.GetData(DataFormats.Text);
        if (!IsDataValid(data)) e.CancelCommand();
    }

    private void Edit_PreviewTextInput(object sender, TextCompositio
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值