2013-07-18 3 views
1

У меня есть ComboBox, связанный с ObservableCollection с именем «Attrs». У меня также есть текстовое поле, привязанное к «CustomValue».Ограничение ввода TextBox в зависимости от Combobox Элемент выбран

В зависимости от того, какие пользователи выбирают, я хочу, чтобы текстовое поле принимало только определенные символы. Например, если имя Attrs.Name «Числовое», я хочу, чтобы текстовое поле принимало только числовые символы, и если Attrs.Name «Text», я хочу, чтобы текстовое поле ничего не принимало.

Я рассмотрел как DataTemplates, так и Validation, но я не смог решить проблему или найти обходной путь.

Любые идеи или ссылки могут помочь.

+0

Возможно, было бы проще иметь два текстовых поля: один, который проверяет только числа, и тот, который проверяет только текст. Затем все, что вам нужно сделать, это переключить видимость текстовых полей в зависимости от того, что выбрано в вашей группе со списком. – MadHenchbot

+1

Я решил пойти с двумя текстовыми полями, гораздо проще реализовать, так как мне не нужно было связывать какой-либо тип только видимости. Я даже решил добавить еще одну коробку. Спасибо, Henchbot! – user2595595

ответ

0

Я собирался прокомментировать и спросить, если вы пробовали это уже, но у меня нет достаточного количества комментариев, чтобы прокомментировать, поэтому, я думаю, я отвечу здесь. Кроме того, к сожалению, все, что я могу вам дать, это код 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, если изменения типа и имеет недопустимые символы.

+0

Спасибо за быстрый ответ Джон, я проверю и посмотрю, работает ли это и вернется к вам! – user2595595

Смежные вопросы