Dot.Blog

C#, XAML, WinUI, WPF, Android, MAUI, IoT, IA, ChatGPT, Prompt Engineering

WPF et le focus d’entrée

[new:30/05/2012]Allez, un peu de développement pour changer de mes derniers billets sur les tendances du futur... Avec Windows 8 on sait que WPF sera le seul moyen de développer des applications échappant au market place, bien designées, et hors sandbox. Une nouvelle jeunesse s’ouvre donc pour cette techno vraisemblablement. Comment gérer le focus d’entrée dans une appli ? voici un b.a.ba pas toujours bien maitrisé !

A l’ancienne

On voit souvent dans les boites de dialogue et les fenêtres d’une application WPF du code hérité de Windows Form qui ressemble à cela :

   1: private void OnLoaded(object sender, EventArgs e)
   2: {
   3:     this.MytextBox.Focus();
   4: }

Ce qui s’accompagne en général du code Xaml suivant dans la fenêtre en question :

   1: <Window ...
   2:         Loaded="OnLoaded">

Cela fonctionne, mais franchement c’est se donner du mal pour pas grand chose et c’est surtout répartir une même fonction logique entre code behind et code UI ce qui est un bon début pour se lancer dans la fabrication de code spaghetti !

WPF offre des moyens bien plus élégants pour réaliser cette opération.

A la page

L’expression “à la page” n’est plus tellement “à la page”, mais puisqu’on parle de page écran... WPF propose donc un moyen plus moderne pour affecter le focus d’entrée d’un dialogue. Par “moderne” je n’entends ce faux modernisme qui consiste à faire “autrement” uniquement parce que c’est plus récent. Je parle de moderniste dans le sens de “progrès” et “d’élégance”.

Ici notamment il est possible d’assurer cette opération purement d’UI uniquement côté UI sans une seule ligne de code behind.

Pour cela on utilise le FocusManager. Son nom se passe de commentaire...

Cela donne :

   1: <Window ...
   2:         FocusManager.FocusedElement="{Binding ElementName=MyTextBox}">

On remarquera que tout tient dans une ligne, en Xaml, et que le lien avec le contrôle qui doit prendre le focus s’effectue via un “element binding”.

 

C’est clair, propre, localisé, ça concerne l’UI et c’est défini dans l’UI.

Bref, une raison d’aller revisiter votre code pour simplifier (ou enfin gérer...) le focus d’entrée de vos dialogues WPF !

 

Et dans tous les cas...

                         ... Stay Tuned !

Faites des heureux, PARTAGEZ l'article !