如何在组合框中设置输入文本的长度?

时间:2013-07-17 12:24:21

标签: c# wpf xaml

如何设置ComboBox输入的文本长度?

例如,它不会超过20岁。

4 个答案:

答案 0 :(得分:1)

我使用了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 :)
        }
    }
}

答案 1 :(得分:1)

只是让故事完整:

您有两种选择:

  • Combobox显然在其模板中包含TextBox。您需要找到一种方法来访问TextBox,可能是通过Combobox Template并设置它MaxLength

  • 您可能将Combobox.Text数据绑定到viewmodel属性。您可以使用INotifyDataErrorInfo在viewmodel中进行验证,甚至可以从setter中抛出异常。如果超过允许的最大长度,用户将看到错误消息。从UX的角度来看,我认为这样做更好。不幸的是,如果你还没有使用INotifyDataErrorInfo,它可以使它工作很多。

答案 2 :(得分:0)

ComboBox Class (MSDN)上:

<ComboBox>
  Items
</ComboBox>

输入的长度取决于您放入的项目。因此,您无法设置该属性。但是,文本框确实有max length

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

答案 3 :(得分:-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>

编辑:这适用于Actipro ComboBox。对于通常的comboBox来完成这项工作,看看here