2013-07-17 2 views
1

Как установить введенную длину текста в ComboBox?Как установить длину введенного текста в поле со списком?

Это, например, не длиннее 20.

+5

я думаю, что это ногти это http://stackoverflow.com/questions/1572887/how-to-set-maxlength-for-combobox-in-wpf – Jonesopolis

+0

Thnx вас. Я могу отметить это как ответ, если вы хотите – Sasha

ответ

-1

Я нашел простое решение, с помощью XAML. В ресурсах ComboBox мы можем установить стиль для текстового поля и через setter set maxlenth.

<ComboBox Name="comboBox" Width="100" IsEditable="True"> 
    <ComboBox.Resources> 
     <Style TargetType="{x:Type TextBox}"> 
      <Setter Property="MaxLength" Value="yourValue"/> 
     </Style> 
    </ComboBox.Resources> 
</ComboBox> 

EDIT: Это работает с Actipro ComboBox. Для обычного comboBox, чтобы сделать эту работу, посмотрите here

+0

Я хотел бы использовать это решение, но оно, похоже, не работает для меня. Я что-то упускаю? –

+0

@TieleDeclercq Я не могу сказать, не видя ваш код – Sasha

+0

У меня есть точный код, как в вашем примере, в новом проекте WPF. Изменено значение «yourValue» до 10. Но это не ограничивает меня введением более 10 символов, как в случае с TextBox. Протестировано в 4, 4.5 и 4.6 –

0

На ComboBox Class (MSDN):

<ComboBox> 
    Items 
</ComboBox> 

Введенная длина зависит от элементов, которые попали в него. Поэтому вы не можете установить это свойство. Textboxes однако действительно есть max length:

<TextBox MaxLength="20"> 
    Text 
</TextBox> 
+0

Неверные факты, упомянутые в ответе. Combobox имеет свойство IsEditable, и когда он установлен в true, пользователь может вводить текст так же, как в TextBox. Поэтому введенная длина зависит от пользовательского ввода, а не только от элементов ComboBox. – Liero

0

Я использовал событие PreviewKeyDown, очень просто + вы можете показать предупреждение или что-то еще.
Зарегистрируйте метод, приведенный ниже, в ComboBox.PreviewKeyDown + = event,
Событие KeyDown не срабатывает, если пользователь нажимает Space.

private void ComboBox_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (ComboBox.Text.Length > 19) // allow max 20 chars 
    { 
     if (e.Key != Key.Back) // allow removing chars 
     { 
      e.Handled = true; // block any additional key press if there is more than allowed max 
      System.Media.SystemSounds.Beep.Play(); // optional: beep to let user know he is out of space :) 
     } 
    } 
} 
+0

Это работает, но также предотвращает такие вещи, как SHIFT + LEFT, чтобы выбрать весь текст и другие подобные причуды. –

1

Просто, чтобы сделать историю полным:

у вас есть два варианта:

  • выпадающие явно содержит в своем шаблоне TextBox. Вам нужно найти способ доступа к TextBox, возможно, через Combobox Template и установить его MaxLength

  • Вы, вероятно, можете привязать Combobox.Text к свойству viewmodel. Вы можете выполнить проверку в viewmodel с помощью INotifyDataErrorInfo или даже путем исключения исключения из setter. Пользователь увидит сообщение об ошибке, если он превысит максимально допустимую длину. Я думаю, что это лучше с точки зрения UX. К сожалению, довольно много работы, чтобы заставить его работать, если вы еще не используете INotifyDataErrorInfo.

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