Comment empêcher le scrolling d'une page quand on sélectionne un textbox

Comment empêcher le scrolling d'une page quand on sélectionne un textbox

Lorsque l’on sélectionne un textbox dans une application windows phone, la page va automatiquement scroller avec d’afficher le textbox au dessus du clavier. Bien que souvent très utile, il y a des cas où on ne souhaite pas ce comportement et c’est le besoin que j’ai rencontré avec 6Sec.

On trouve beaucoup de solutions sur internet, la plupart ayant comme principe d’utiliser un translatetransform et de s’enregistrer sur les rendertransform de la frame principale de l’application sur la page pour “compenser” le déplacement de la page. Bonne idée en soit mais catastrophique en fait, car à chaque fois que l’utilisateur saisira un caractère, le système va recalculer le déplacement idéal, or comme on aura déplacé la page pour compenser, il va recalculer une nouvelle position idéal, que l’on va ensuite compenser, puis il va recalculer, etc… en ne faisant pas attention, on arrive vite à des translatetransform de 1000 sur la page et de -1000 sur la frame avec des performances qui diminue au fur et à mesure de la congestion.

Comment faire alors ?

En fait, c’est très très simple, il suffit juste de supprimer temporairement le rendertransform de la frame, ainsi, elle ne sera plus dans la capacité de se déplacer.

frame.RenderTransform = null;

Sauf que l’on ne veut pas perturber le fonctionnement des autres pages, on va donc le faire uniquement quand on affiche la page.

Dans la méthode OnNavigatedTo on va supprimer ce rendertransform et le stocker dans une variable locale :


PhoneApplicationFrame frame = Application.Current.RootVisual as PhoneApplicationFrame;
_exrender = frame.RenderTransform;
frame.RenderTransform = null;

puis dans OnNavigatingFrom, on va réaffecter l’ancienne transformation :


PhoneApplicationFrame frame = Application.Current.RootVisual as PhoneApplicationFrame;
frame.RenderTransform = _exrender;

Et voilà ! Votre page ne se déplacera plus automatiquement maintenant !

 

 

Comments are closed.