Silverlight 5 + AutoCompleteBox = Ошибка - PullRequest
4 голосов
/ 13 декабря 2011

Только что установили 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) введите «aa» в автобокс.

2) нажмите кнопку.

3) введите "q".(TextChanged все еще вызывается).

4) стереть "q" - TextChanged не вызван.

5) снова набрать "q" - TextChanged не вызвано.

6) и так далее, пока вы не выберете новую букву.А потом все начинается снова.

1 Ответ

6 голосов
/ 28 февраля 2012

Я нашел обходной путь для этого странного поведения. Вам нужен элемент управления, полученный из 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());
    }
}
...