niedziela, 8 maja 2011

Problem z dwukrotnym wywołaniem zdarzenia TextChanged w TextBox

Emulator Windows Phone 7 ma dość banalny, ale idiotyczny błąd, który o dziwo nie został wykryty przed wypuszczeniem na rynek Visual Studio 2010 Express for Windows Phone. Otóż zdarzenie TextChanged w kontrolce TextBox wywoływane jest dwukrotnie dla każdego przyciśnięcia klawisza. Irytujące, nieprawdaż?

Problem wynika z faktu, że kontrolka TextBox zawiera w sobie drugi TextBox, który jest wykorzystywany dla stanu readonly/disabled - stąd podwójne wywołanie! Ten błąd jest niestety reprodukowalny na fizycznym aparacie, dlatego też trzeba sobie z nim poradzić w ten czy inny sposób.

Więc jeśli:
  • zamierzamy korzystać z eventu TextChanged dla TextBox-a
  • kontrolka będzie zawsze aktywna na stronie (enabled)
  • kontrolka nigdy nie będzie w stanie readonly
to możemy skorzystać z prostego zabiegu, który rozwiąże opisany problem.

Krok po kroku

  1. Otwórz solucję w Microsoft Expression Blend.
  2. Znajdź nieszczęsny TextBox.
  3. Z menu kontekstowego wybierz: "Edit template" -> "Edit a Copy...":


  4. Po wykonaniu ww. kroku w App.xaml zostanie utworzony nowy styl dla kontrolki TextBox o nazwie TextBoxStyle1.
  5. Teraz musimy do wyedytować, wybierając z menu kontekstowego "View XAML".
  6. Tutaj musimy zakomentować fragment odpowiedzialny za wyświetlanie TextBox-a w stanie readonly/disabled (szukaj łańcucha DisabledOrReadonlyBorder)

  7. Problem rozwiązany! :-)

1 komentarz:

dotnetomaniak.pl pisze...

Problem z dwukrotnym wywołaniem zdarzenia TextChanged w TextBox | WP7 blog - programowanie w .NET...

Dziękujemy za publikację - Trackback z dotnetomaniak.pl...