我在项目中使用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设置最大长度?
答案 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();
}
}