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());
    }
}
Другие вопросы по тегам