Windows phone 7 Обработка Backspace Событие KeyDown - PullRequest
5 голосов
/ 08 мая 2011

У меня есть текстовое поле в XAML:

<TextBox Text="blah" 
         Name="blah" 
         LostFocus="blah_OnLostFocus" 
         KeyDown="blah_OnKeyDown"/>
В файле

.cs объявлено следующее событие:

    private void blah_OnKeyDown(object sender, KeyEventArgs e)
    {
        TextBox t = sender as TextBox;
        int i = 0;
        if(e.Key == Key.Delete)
            i = 1;
    }

Когда я нажимаю клавишу возврата на клавиатуре эмулятора, событие игнорируется. Если я нажимаю любую другую кнопку, она срабатывает. Кроме того, когда я использую то же тело события для события KeyUp, клавиша Backspace запускает его.

Как отследить, когда клавиша возврата была нажата для события KeyDown? Почему нажатие клавиши возврата не вызывает событие KeyDown?

Спасибо.

Ответы [ 2 ]

6 голосов
/ 08 мая 2011

Кнопка возврата назад обрабатывается внутри элемента управления текстовым полем. Элемент управления примет событие возврата и удалит букву и не будет помещать событие в очередь на ваше событие. Это по замыслу. Вы заметите, что если в текстовом поле нет букв, событие всплывет. Чтобы обойти это, вы можете использовать AddHandler для обработки события. Попробуйте сделать это:

//Handle the mainpage loaded event and add the handler to the textbox
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    textBox1.AddHandler(TextBox.KeyDownEvent, new KeyEventHandler(blah_KeyDown), true);
}

Затем измените ваш обработчик события Key_Down следующим образом:

private void blah_OnKeyDown(object sender, KeyEventArgs e)
{
    TextBox t = sender as TextBox;
    int i = 0;
    if(e.Key == Key.Back)
            i = 1;
}

Это должно иметь текстовое поле для внутренней обработки события, но также для вызова вашего события OnKeyDown.

1 голос
/ 08 мая 2011

Чтобы обнаружить возврат, вам нужно использовать Key.Back вместо Key.Delete

См. Перечисление ключей в http://msdn.microsoft.com/en-us/library/system.windows.input.key(v=VS.95).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...