Событие TextBox.TextChanged дважды запускается в эмуляторе Windows Phone 7

У меня очень простое тестовое приложение, чтобы поиграться с Windows Phone 7. Я только что добавил TextBox и TextBlock на стандартный шаблон пользовательского интерфейса. Единственный пользовательский код:

public partial class MainPage : PhoneApplicationPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    private int counter = 0;

    private void TextBoxChanged(object sender, TextChangedEventArgs e)
    {
        textBlock1.Text += "Text changed " + (counter++) + "\r\n";
    }
}

Текстовое поле . Событие TextChanged связано с TextBoxChanged в XAML:


Однако каждый раз, когда я нажимаю клавишу во время работы в эмуляторе (экранной или физической, нажав Пауза для включения последнего) увеличивает счетчик вдвое, отображая две строки в TextBlock . Все, что я пробовал, показывает, что событие действительно дважды запускается, и я не знаю почему. Я проверил, что на него подписывается только один раз - если я отписываюсь в конструкторе MainPage , ничего не происходит (с текстовым блоком) при изменении текста.

Я попробовал эквивалентный код в обычном приложении Silverlight, и там его не было. У меня нет физического телефона, чтобы воспроизвести это на данный момент. У меня нет Я не нашел никаких записей об этой известной проблеме в Windows Phone 7.

Может кто-нибудь объяснить, что я делаю неправильно, или я должен сообщить об этом как об ошибке?

РЕДАКТИРОВАТЬ: Чтобы уменьшить вероятность этого существа вплоть до двух текстовых элементов управления я попытался полностью удалить TextBlock и изменить метод TextBoxChanged на , просто увеличить счетчик . Затем я запустил эмулятор, набрал 10 букв и затем , а затем установил точку останова в строке counter ++; (просто чтобы избавиться от любой вероятности того, что взлом в отладчике вызывает проблемы. ) - и он показывает счетчик как 20.

РЕДАКТИРОВАТЬ: Я сейчас спросил на форуме Windows Phone 7 ... посмотрим, что произойдет.

90
задан Stefan Wick MSFT 6 January 2019 в 05:41
поделиться

4 ответа

Я бы пошел на ошибку, в основном потому, что если вы поместите туда события KeyDown и KeyUp , это показывает, что они запускаются только один раз (каждое из них), но событие TextBoxChanged запускается дважды

18
ответ дан 24 November 2019 в 07:07
поделиться

Заявление об ограничении ответственности - я не знаком с нюансами xaml и знаю, что это звучит нелогично ... но в любом случае - моя первая мысль - попробовать передавать как простые аргументы событий, а не textchangedeventargs. Не имеет смысла, но, может быть, это поможет? Похоже, что когда я раньше видел подобные двойные срабатывания, это либо из-за ошибки, либо из-за того, что за кулисами происходили 2 вызова обработчика событий добавления ... Я не уверен, что именно?

Если вы нужно быстро и грязно, опять же, у меня нет опыта работы с xaml - моим следующим шагом было бы просто пропустить xaml для этого текстового поля в качестве быстрого обходного пути ... сделайте это текстовое поле полностью на С #, пока вы не сможете точно определить ошибку или сложный код ... то есть, если вам нужно временное решение.

0
ответ дан 24 November 2019 в 07:07
поделиться

Конечно, мне кажется, что это ошибка, если вы пытаетесь инициировать событие каждый раз, когда текст изменяется, вы можете попробовать использовать вместо этого двустороннюю привязку, к сожалению, это не приведет к увеличению - нажатие клавиши меняет события (только когда поле теряет фокус). Вот обходной путь, если он вам нужен:

        this.textBox1.TextChanged -= this.TextBoxChanged;
        textBlock1.Text += "Text changed " + (counter++) + "\r\n";
        this.textBox1.TextChanged += this.TextBoxChanged;
0
ответ дан 24 November 2019 в 07:07
поделиться

Я считаю, что это всегда было ошибкой в Compact Framework. Должно быть, она была перенесена в WP7.

1
ответ дан 24 November 2019 в 07:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: