Interface utilisateur indépendante de la taille de police :tout s'est cassé quand je suis passé en 120 DPI ?

StackOverflow https://stackoverflow.com/questions/50528

Question

Je lisais donc ces directives de l'interface utilisateur de Windows Vista auxquelles quelqu'un a fait référence dans une autre question, et ils ont mentionné que vous devriez pouvoir survivre à un passage à 120 DPI.Eh bien, je lance ma VM pratique avec mon application installée, et qu'obtenons-nous...AAAAGH!!!ÉCHEC MASSIF DE L'INTERFACE UTILISATEUR !

Tout est confus :certains conteneurs ne sont pas assez grands pour leur texte ;certaines commandes qui étaient positionnées « les unes à côté des autres » sont désormais toutes écrasées/écartées ;certains boutons ne sont pas assez hauts ;mon ListView les colonnes ne sont pas assez larges...euh.

Il semble qu’une approche complètement différente s’impose.Mon précédent utilisait essentiellement le concepteur Windows Forms VS2008 pour créer, je suppose, une mise en page basée sur les pixels.Je peux voir que si je m'en tenais à Windows Forms, FlowLayoutPanels serait utile, même si je les ai trouvés plutôt rigides dans le passé.Ils ne résolvent pas non plus le problème où les conteneurs (par ex.le formulaire lui-même) ne sont pas assez grands ;il y a probablement un moyen de faire ça ?Peut etre que AutoSize propriété?

Cela pourrait également être un signe qu'il est temps de passer à WPF ;J'ai l'impression qu'il est spécialement conçu pour ce genre de chose.

Le problème fondamental semble se résumer à ceci :

  • Si je devais m'en tenir à Windows Forms, quelles sont toutes les astuces pour obtenir une mise en page indépendante de la taille de police qui puisse survivre à l'utilisateur en définissant ses polices en grande taille ou en réglant l'affichage à 120 DPI ?
  • WPF présente-t-il des avantages significatifs ici, et si oui, pouvez-vous essayer de me convaincre que cela en vaut la peine ?
  • Existe-t-il des « meilleures pratiques » générales pour les mises en page indépendantes de la taille de police, soit dans la pile .NET, soit en général ?
Était-ce utile?

La solution

Apprenez comment le Ancre et Dock les propriétés fonctionnent sur vos contrôles, laissez tout ce qui peut Taille automatique lui-même et utilisez un TableLayoutPanel quand tu peux.

Si vous faites ces trois choses, vous bénéficierez d'une grande expérience de conception WPF dans Windows Forms.Un bien conçu TableLayoutPanel fera de son mieux pour dimensionner les contrôles afin qu'ils s'adaptent correctement au formulaire.Combiné avec Taille automatique les commandes, l'amarrage et le Mode mise à l'échelle automatique mentionné par Soeren Kuklau, vous devriez être capable de créer quelque chose qui évolue bien.Sinon, votre formulaire comporte peut-être trop de contrôles ;envisagez de le diviser en pages à onglet, en boîtes à outils flottantes ou en un autre espace.

Dans WPF, c'est beaucoup plus simple car le concept de contrôles de dimensionnement automatique est intégré ;dans la plupart des cas, si vous placez un élément WPF en utilisant une paire de coordonnées, vous le faites mal.Néanmoins, vous ne pouvez pas changer le fait qu'à des résolutions inférieures, il ne faut pas beaucoup de texte de 120 dpi pour remplir l'écran.Parfois, le problème ne vient pas de votre agencement, mais d’une tentative d’en mettre trop dans un petit espace.

Autres conseils

Si je devais m'en tenir à Windows Forms, quelles sont toutes les astuces pour obtenir une mise en page indépendante de la taille de police qui puisse survivre à l'utilisateur en définissant ses polices en grande taille ou en réglant l'affichage à 120 DPI ?

Pour un, Mode mise à l'échelle automatique peut-être ton ami.

En général, le problème consiste à utiliser deux « constantes » différentes pour la présentation du formulaire, puis à modifier l’une de ces constantes sans modifier l’autre.

Vous utilisez des pixels pour vos entités de formulaire et des points (essentiellement des pouces) pour spécifier la taille de la police.Les pixels et les points sont liés par DPI, vous modifiez donc le DPI et tout à coup, les valeurs fixes de vos pixels ne correspondent pas aux valeurs fixes de vos points.

Il existe des packages et des classes pour cela, mais en fin de compte, vous devez choisir une unité ou une autre, ou mettre à l'échelle l'une des unités en fonction de la constante changeante.

Personnellement, je changerais les entités du formulaire en pouces.Je ne suis pas un expert en C#, donc je ne sais pas si cela est pris en charge de manière native ou si vous devez effectuer un dimensionnement dynamique de formulaire au démarrage de l'application.

Si vous devez le faire dans votre logiciel, continuez et dimensionnez tout normalement (disons, à votre 96 DPI habituel).

Lorsque votre application démarre, vérifiez que le système est à 96 DPI avant d'afficher vos formulaires.Si c'est le cas, tant mieux.Sinon, définissez une variable avec le facteur de correction, puis redimensionnez et traduisez (modifiez à la fois l'emplacement et la taille) de chaque entité avant d'afficher le formulaire.

Le summum, cependant, serait de tout spécifier en pouces ou en points (un point équivaut à 1/72 de pouce) et de laisser le système d'exploitation s'en occuper.Vous devrez peut-être faire face à des cas extrêmes (un écran extérieur avec un DPI correctement réglé afficherait votre application en quelques pixels...)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top