如何设置 ComboBox 的输入文本长度?
例如,它不会超过 20 个。
我用的是 PreviewKeyDown 事件,很简单+你可以显示警告什么的。
将以下方法注册到您的 ComboBox.PreviewKeyDown += 事件中,
如果用户按空格键,则不会触发 KeyDown 事件。
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 :)
}
}
}
只是为了让故事完整:
你有两个选择:
Combobox 显然包含TextBox
在其模板中。您需要找到一种访问 TextBox 的方法,可能是通过Combobox Template
并将其设置为MaxLength
您可能将 Combobox.Text 数据绑定到 viewmodel 属性。您可以使用 INotifyDataErrorInfo 在 viewmodel 中进行验证,甚至可以从 setter 中抛出异常。如果超过最大允许长度,用户将看到错误消息。从用户体验的角度来看,我认为这更好。不幸的是,如果您还没有使用 INotifyDataErrorInfo,那么要让它工作还需要做很多工作。
我通过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>
编辑:这适用于 Actipro ComboBox。对于通常的组合框来完成这项工作,看看这里