Я собирался прокомментировать и спросить, если вы пробовали это уже, но у меня нет достаточного количества комментариев, чтобы прокомментировать, поэтому, я думаю, я отвечу здесь. Кроме того, к сожалению, все, что я могу вам дать, это код VB.Net прямо сейчас, а не C#. Но, надеюсь, это по крайней мере помогает.
Вы можете создать пользовательский элемент управления, который наследуется TextBox, и создать DependencyProperty, который может быть привязан к выбранному типу ComboBox в:
Private Shared InputTypeProperty As DependencyProperty = DependencyProperty.Register("InputType", GetType(MyInputType), GetType(MyTextBox))
Public Property InputType As MyInputType
Get
Return GetValue(InputTypeProperty)
End Get
Set(value As MyInputType)
SetValue(InputTypeProperty, value)
End Set
End Property
Затем в пользовательский элемент управления, используйте событие PreviewKeyDown для обработки ввода на основе на свойство InputType на элементе управления. Всякий раз, когда вводится недопустимый тип символа, установите e.Handled в True и он будет игнорировать вход.
Private Sub MyTextBox_PreviewKeyDown(sender As Object, e As KeyEventArgs) Handles Me.PreviewKeyDown
Select Case InputType
'Handle input here
End Select
End Sub
Вы также можете сделать PropertyChangedCallback в свойстве зависимостей, чтобы очистить TextBox, если изменения типа и имеет недопустимые символы.
Возможно, было бы проще иметь два текстовых поля: один, который проверяет только числа, и тот, который проверяет только текст. Затем все, что вам нужно сделать, это переключить видимость текстовых полей в зависимости от того, что выбрано в вашей группе со списком. – MadHenchbot
Я решил пойти с двумя текстовыми полями, гораздо проще реализовать, так как мне не нужно было связывать какой-либо тип только видимости. Я даже решил добавить еще одну коробку. Спасибо, Henchbot! – user2595595