WinRT KeyDown volán dvakrát pro klávesu Enter

Všiml jsem si zvláštního problému, ke kterému dochází při zpracování události KeyDown. Když uživatel stiskne klávesu ‘Enter’, tato událost je ve skutečnosti ve WinRT zpracována dvakrát (alespoň pro ovladací prvky TextBoxPasswordBox  u kterých jsem si tohoto chování všiml).

Podívejte se na následující příklad:

Co se stane, když uživatel uvnitř textového pole, které má zaregistrovaný tento handler události KeyDown, stiskne ‘Enter’?

Jak jste očekávali, událost je zpracována a frame naviguje na stránku  SomeOtherPage . Ale jakmile zpracování skončí, je metoda zavolána znovu s přesně stejnými argumenty! Kód metody je proveden znovu, takže frame podruhé načte shodnou stránku (a nyní tedy při pokusu o navigaci zpět je v navigačním zásobníku ještě původní instance).

Toto chování je zřejmě spojeno pouze s klávesou ‘Enter’ a nevyskytuje se u jiných kláves. Řešení problému naštěstí je snadné:

Nastavením vlastnosti KeyRoutedEventArgsHandled na true říkáme, aby se zpracování a “bublání” směrem XAML stromem nahoru ukončilo, ale to zároveň zabrání tomu, aby byla událost znovu zpracována na stejném ovládacím prvku.

Problém jsem reportoval v aplikaci Windows Feedback  v sekci Developer Platform. Pokud chcete vyřešení tohoto bugu podpořit, dejte mu hlas kliknutím sem 🙂 .

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

*