Silverlight中的AutoCompleteBox的MaxLength

时间:2010-06-26 20:41:09

标签: .net silverlight-3.0

我在项目中使用AutoCompleteBox控件。现在我需要限制用户可以输入的文本长度,例如最大长度为50个字符。对于这种情况,TextBox具有MaxLength属性,但AutoCompleteBox没有。此外,AutoCompleteBox不会公开TextBox的属性。

我试图以这种方式解决问题:

private void autoCompleteBox_TextChanged(object sender, RoutedEventArgs e)
{
        AutoCompleteBox autoCompleteBox = sender as AutoCompleteBox;
        if (autoCompleteBox.Text.Length > MaxCharLength)
        {
            autoCompleteBox.Text = autoCompleteBox.Text.Substring(0, MaxCharLength);
        }
}

此方法的一个重大缺点是,在设置Text属性后,文本框插入符号将重置为开始位置,当用户继续键入时,末尾的字符将被修剪,插入符号始终位于开头。 没有方法可以控制插入符号(如TextBox的Select方法)。

任何想法如何为AutoCompleteBox设置最大长度?

2 个答案:

答案 0 :(得分:1)

这个问题可以通过从Control类中继承子类来解决,从中派生出AutoCompleteBox:

public class AutoCompleteBoxMaxLengthed : AutoCompleteBox
{
    public int MaxLength
    {
        get;
        set;
    }

    protected override void OnKeyDown(KeyEventArgs e)
    {
        if (Text.Length >= MaxLength)
        {
            e.Handled = true;
        }
        else
        {
            base.OnKeyDown(e);
        }
    }
}

答案 1 :(得分:1)

怎么样......

    public class CustomAutoCompleteBox : AutoCompleteBox
{
    private int _maxlength;
    public int MaxLength 
    {
        get
        {
            return _maxlength;
        } 
        set
        {
            _maxlength = value;
            if (tb != null)
                tb.MaxLength = value;
        } 
    }

    TextBox tb;
    public override void OnApplyTemplate()
    {
        tb = this.GetTemplateChild("Text") as TextBox;
        base.OnApplyTemplate();
    }
}