2010-06-26 68 views
1

我在我的項目中使用了一個AutoCompleteBox控件。現在我需要限制用戶可以輸入的文本的長度,例如最長50個字符。對於這種情況,TextBox具有MaxLength屬性,但AutoCompleteBox沒有。此外,AutoCompleteBox不公開TextBox的屬性。MaxLength for Silverlight中的AutoCompleteBox

我試圖解決的問題是這樣的:

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設置最大長度?

回答

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(); 
    } 
} 
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); 
     } 
    } 
} 
相關問題