最近做一个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