Ошибка редактирования пользовательского элемента управления столбцом числовой сетки данных Wpf

#wpf #user-controls

#wpf #пользовательские элементы управления

Вопрос:

Я хочу создать числовое текстовое поле в пользовательском элементе управления datagrid. Я создал, используя приведенный ниже код, и если он работает нормально. Моя проблема заключается в том, что когда я набираю сетку, числовая ячейка допускает первый ключевой алфавит, затем он ограничивает алфавит и допускает только цифры.

В WGrid XAML

 <DataGrid x:Class="WpfGrid.WGrid"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:WpfGrid"
         mc:Ignorable="d" 
         d:DesignHeight="300" Width="500" PreviewKeyDown="DataGrid_PreviewKeyDown" BeginningEdit="DataGrid_BeginningEdit" SelectionMode="Single" SelectionUnit="Cell" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserResizeRows="False" CanUserSortColumns="False" CanUserResizeColumns="False" EnableRowVirtualization="False">
 
 namespace WpfGrid
{
  public partial class WGrid : DataGrid
  {

    public WGrid()
    {
        InitializeComponent();
    }

  }
  public class DataGridNumericColumn : DataGridTextColumn
  {
    protected override object PrepareCellForEdit(System.Windows.FrameworkElement editingElement, System.Windows.RoutedEventArgs editingEventArgs)
    {
        TextBox edit = editingElement as TextBox;
        edit.PreviewTextInput  = OnPreviewTextInput;
        return base.PrepareCellForEdit(editingElement, editingEventArgs);
    }
    void OnPreviewTextInput(object sender, System.Windows.Input.TextCompositionEventArgs e)
    {
        e.Handled = new Regex("[^0-9.]").IsMatch(e.Text);
    }
  }
}
 

После создания этого элемента управления я добавил это в новое приложение WPF

XAML

и в форме

 public partial class MainWindow : Window
{
    ObservableCollection<Customer> collection = new    ObservableCollection<Customer>();
    public MainWindow()
    {
        InitializeComponent();
        collection.Add(new Customer());
        Dgv.ItemsSource = collection;
    }
    public class Customer
    {
        public string Name { get; set; }
        public string Age { get; set; }
        public string Marks { get; set; }

    }
 

При запуске этого DataGridNumericColumn разрешен первый алфавит символов, после чего он ограничивает.
Пожалуйста, скажите мне, как исправить эту проблему. Имя пользовательского элемента управления — WGrid.

Спасибо.

Изображение datagrid. Вы можете увидеть символ а в столбце вес.Это происходит только при начале редактирования

Комментарии:

1. Не могли бы вы добавить более подробную информацию о значении col и показать нам снимок результата?

2. Я использовал ur-код без проблем.

3. Не могли бы вы отправить zip-файл созданного вами проекта.