#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.
Спасибо.
Комментарии:
1. Не могли бы вы добавить более подробную информацию о значении col и показать нам снимок результата?
2. Я использовал ur-код без проблем.
3. Не могли бы вы отправить zip-файл созданного вами проекта.