Как установить введенную длину текста в ComboBox?Как установить длину введенного текста в поле со списком?
Это, например, не длиннее 20.
Как установить введенную длину текста в ComboBox?Как установить длину введенного текста в поле со списком?
Это, например, не длиннее 20.
Я нашел простое решение, с помощью 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
Я хотел бы использовать это решение, но оно, похоже, не работает для меня. Я что-то упускаю? –
@TieleDeclercq Я не могу сказать, не видя ваш код – Sasha
У меня есть точный код, как в вашем примере, в новом проекте WPF. Изменено значение «yourValue» до 10. Но это не ограничивает меня введением более 10 символов, как в случае с TextBox. Протестировано в 4, 4.5 и 4.6 –
На ComboBox Class (MSDN):
<ComboBox>
Items
</ComboBox>
Введенная длина зависит от элементов, которые попали в него. Поэтому вы не можете установить это свойство. Textboxes однако действительно есть max length:
<TextBox MaxLength="20">
Text
</TextBox>
Неверные факты, упомянутые в ответе. Combobox имеет свойство IsEditable, и когда он установлен в true, пользователь может вводить текст так же, как в TextBox. Поэтому введенная длина зависит от пользовательского ввода, а не только от элементов ComboBox. – Liero
Я использовал событие 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 :)
}
}
}
Это работает, но также предотвращает такие вещи, как SHIFT + LEFT, чтобы выбрать весь текст и другие подобные причуды. –
Просто, чтобы сделать историю полным:
у вас есть два варианта:
выпадающие явно содержит в своем шаблоне TextBox
. Вам нужно найти способ доступа к TextBox, возможно, через Combobox Template
и установить его MaxLength
Вы, вероятно, можете привязать Combobox.Text к свойству viewmodel. Вы можете выполнить проверку в viewmodel с помощью INotifyDataErrorInfo или даже путем исключения исключения из setter. Пользователь увидит сообщение об ошибке, если он превысит максимально допустимую длину. Я думаю, что это лучше с точки зрения UX. К сожалению, довольно много работы, чтобы заставить его работать, если вы еще не используете INotifyDataErrorInfo.
я думаю, что это ногти это http://stackoverflow.com/questions/1572887/how-to-set-maxlength-for-combobox-in-wpf – Jonesopolis
Thnx вас. Я могу отметить это как ответ, если вы хотите – Sasha