Silverlight 5 + AutoCompleteBox = Ошибка
Только что установили SL5 и инструментарий, которые были выпущены несколько дней назад.
Ошибка возникает, когда для свойства Text объекта AutoCompleteBox установлено значение string.Empty. Это приводит к тому, что AutoCompleteBox находится в состоянии ошибки. Чтобы воспроизвести ошибку:
добавить AutoCompleteBox и кнопку на главную страницу. Зарегистрируйтесь в событиях TextChanged и Click. Это код позади:
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
auto.Text = string.Empty;
}
private void auto_TextChanged(object sender, RoutedEventArgs e)
{
// Put a break point here.
}
}
Во время выполнения:
1) введите "аа" в автобокс.
2) нажмите на кнопку.
3) введите "q". ( TextChanged все еще вызывается).
4) стереть "q" - TextChanged не вызывается.
5) снова введите "q" - TextChanged не вызывается.
6) и так далее, пока не выберешь новое письмо. И тогда это начинается снова.
1 ответ
Я нашел обходной путь для этого странного поведения. Вам нужен элемент управления, полученный из AutoCompleteBox и переопределить метод OnApplyTemplate, чтобы найти внутренний TextBox AutoCompleteBox.
Когда происходит внутреннее событие TextBox TextChanged, необходимо вручную запустить событие TextChanged элемента управления AutoCompleteBox.
public class CustomAutoComplete : AutoCompleteBox
{
TextBox mytext;
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
mytext = GetTemplateChild("Text") as TextBox;
mytext.TextChanged += new System.Windows.Controls.TextChangedEventHandler(mytext_TextChanged);
}
void mytext_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e)
{
this.Text = mytext.Text;
OnTextChanged(new RoutedEventArgs());
}
}