59 votes

Comment définir l'emplacement de la fenêtre WPF dans le coin inférieur droit du bureau ?

Je veux afficher ma fenêtre au dessus du TaskBar L'heure de l'horloge de Windows.

Comment puis-je trouver l'emplacement du coin inférieur droit de mon bureau ?

J'utilise ce code qui fonctionne bien dans l'application Windows forms mais ne fonctionne pas correctement dans WPF :

var desktopWorkingArea = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea;
this.Left = desktopWorkingArea.Right - this.Width;
this.Top = desktopWorkingArea.Bottom - this.Height;

0voto

PIntag Points 534

Les solutions ci-dessus n'ont pas entièrement fonctionné pour ma fenêtre - elle était trop basse et la partie inférieure de la fenêtre se trouvait sous la barre des tâches et sous l'espace de travail du bureau. Je devais définir la position après le rendu du contenu de la fenêtre :

private void Window_ContentRendered(object sender, EventArgs e)
{
    var desktopWorkingArea = System.Windows.SystemParameters.WorkArea;
    this.Left = desktopWorkingArea.Right - this.Width - 5;
    this.Top = desktopWorkingArea.Bottom - this.Height - 5;
}

De plus, une partie du cadre était hors champ, j'ai donc dû ajuster par 5. Je ne sais pas pourquoi cela est nécessaire dans ma situation.

0voto

JMIII Points 118

La réponse de @Klaus78 est correcte. Mais comme c'est la première chose que google fait apparaître et que vous travaillez dans des environnements où la résolution de l'écran peut changer souvent, par exemple si votre application fonctionne sur des bureaux virtuels ou des serveurs virtuels et que vous avez besoin qu'elle mette à jour son placement lorsque la résolution de l'écran change, j'ai trouvé qu'il était utile de lier l'événement SystemEvents.DisplaySettingsChanged. Voici un exemple utilisant rx et vous pouvez mettre ceci dans votre constructeur pour votre vue.

        Observable
            .FromEventPattern<EventHandler, EventArgs>(_ => SystemEvents.DisplaySettingsChanged += _, _ => SystemEvents.DisplaySettingsChanged -= _)
            .Select(_ => SystemParameters.WorkArea)
            .Do(_ =>
            {
                Left = _.Right - Width;
                Top = _.Bottom - Height;
            })
            .Subscribe();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X