7
votes

WPF - centrage sur le bureau primaire

Je sais que WPF a une valeur "CentreScreen" pour centrer une fenêtre sur le bureau. Cependant, sur double moniteur, ce n'est pas très agréable.

Comment puis-je centrer sur le moniteur principal? Dois-je passer par la chanson et la danse de la détection du bureau principal, de récupérer sa géométrie, etc., ou y a-t-il une meilleure façon?


1 commentaires

+1, bonne question. Nous avons également dû aller dans la mesure du travail avec WPF par le biais de Citrix et de la lutte contre les problèmes de centrage / maximisage du WPF et des citrixes. :)


4 Réponses :


0
votes

Nous avons eu le même problème. Malheureusement, après de nombreuses discussions avec TA et le client, il a été décidé d'être une meilleure valeur (en termes d'argent et de temps) pour la maximiser sur le moniteur principal.


0 commentaires

6
votes

Plusieurs écrans sont un peu un problème et il n'a pas de manière intégrée, bien tordue de les gérer, mais avec des mathématiques et des caramètres système, vous pouvez le faire faire.

Si vous positionnez votre fenêtre en position ( 0,0) Ce serait le coin supérieur gauche de votre écran principal. Donc, pour que votre fenêtre apparaisse dans le centre de cet écran, utilisez: xxx

L'idée de base est assez simple, donc pas besoin d'expliquer.

Remarque Ce code est pour C #, mais je suis sûr que VB a quelque chose de similaire.

Notez également que vous devez utiliser la propriété ActualitéWidth \ ActuelleHeight et non la propriété de largeur \ Height car elle pourrait contenir une valeur NAN.

bonne chance.


1 commentaires

Merci. Je suppose que la réponse est que nous devons le faire de la manière à l'ancienne, ce que j'attendais. :)



0
votes

Utilisez SystemParameters.workarea . Cela vous donne une partie du moniteur principal qui n'est pas repris par la barre des tâches, qui devrait vous donner un centre plus agréable.


0 commentaires

0
votes

Ceci est ma solution purement WPF pour centrer une fenêtre sur le moniteur principal avec une bordure d'espace vide autour de celle-ci (parce que je ne le veux pas maximisée). Ma configuration est un moniteur carré-ish sur ma gauche et un écran large à ma droite. Ceci a été testé avec chaque moniteur étant défini comme le moniteur principal sous Windows.

Avant d'arriver à cette solution, il existe trois propriétés utiles sur System.Windows.systemparamètres qui donnent diverses hauteurs. Les chiffres donnés concernent mon écran large 1920x1080.

  • primaireScreenheight - 1080. La hauteur de la résolution réelle définie dans Windows.
  • workarea.height - 1040. La hauteur réelle de la résolution moins la barre de démarrage
  • FullPriMaryScreenHeight - 1018. La résolution réelle moins la barre de démarrage et moins l'en-tête de la fenêtre.

    c'est ma solution et j'utilise workarea.height : xxx


0 commentaires