2010-06-26 3 views
1

내 프로젝트에서 AutoCompleteBox 컨트롤을 사용합니다. 이제는 사용자가 입력 할 수있는 텍스트의 길이를 제한해야합니다. 최대 길이는 50 자입니다. 이 경우 TextBox에는 MaxLength 속성이 있지만 AutoCompleteBox에는 없습니다. 또한 AutoCompleteBox는 TextBox의 속성을 노출하지 않습니다. Silverlight의 AutoCompleteBox에 대한 MaxLength

나는이 방법으로 문제를 해결하려고 :

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); 
     } 
} 

이 방법의 큰 단점은 텍스트 속성을 설정 한 후, 텍스트 상자 캐럿이 시작 위치로 재설정 것을 때, 그리고 사용자를 입력을 계속하면 끝에있는 문자가 잘리고 캐럿은 항상 처음으로 이동합니다. TextBox의 Select 메서드와 같이 캐럿을 제어 할 수있는 메서드가 없습니다.

자동 완성 상자에서 최대 길이를 설정하는 방법은 무엇입니까?

답변

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

문제는 이런 식으로, 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); 
     } 
    } 
}