Как установить расположение окна WPF в правом нижнем углу рабочего стола? - PullRequest
50 голосов
/ 01 октября 2011

Я хочу, чтобы мое окно отображалось поверх часов TaskBar, когда они запускаются.

Как найти местоположение в правом нижнем углу рабочего стола?используйте этот код, который хорошо работает в приложении Windows Form, но не работает правильно в WPF:

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

Ответы [ 6 ]

100 голосов
/ 29 февраля 2012

Этот код работает для меня в WPF как с дисплеем 100%, так и с 125%

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

Вкратце я использую

System.Windows.SystemParameters.WorkArea

вместо

System.Windows.Forms.Screen.PrimaryScreen.WorkingArea

10 голосов
/ 01 октября 2011

Чтобы получить доступ к прямоугольнику рабочего стола, вы можете использовать свойство Класс экрана - Screen.PrimaryScreen.WorkingArea - прямоугольник вашего рабочего стола.

В вашем окне WPF есть Top и Leftсвойства, а также Width и Height, чтобы вы могли установить эти свойства относительно местоположения рабочего стола.

4 голосов
/ 18 мая 2015

Вы можете использовать событие SizeChanged окна вместо Loaded, если хотите, чтобы окно оставалось в углу при изменении его размера.Это особенно удобно, если в окне Window.SizeToContent установлено значение, отличное от SizeToContent.Manual;в этом случае он будет соответствовать содержимому, оставаясь в углу.

public MyWindow()
{
    SizeChanged += (o, e) =>
    {
        var r = SystemParameters.WorkArea;
        Left = r.Right - ActualWidth;
        Top = r.Bottom - ActualHeight;
    };
    InitializeComponent();
}

Обратите внимание, что вы должны вычесть ActualWidth и ActualHeight (вместо Width и Height, как показанов некоторых других ответах) для обработки более возможных ситуаций, например, переключения между режимами SizeToContent во время выполнения.

3 голосов
/ 27 апреля 2013

Мой код:

MainWindow.WindowStartupLocation = WindowStartupLocation.Manual;

MainWindow.Loaded += (s, a) =>
{
    MainWindow.Height = SystemParameters.WorkArea.Height;
    MainWindow.Width = SystemParameters.WorkArea.Width;
    MainWindow.SetLeft(SystemParameters.WorkArea.Location.X);
    MainWindow.SetTop(SystemParameters.WorkArea.Location.Y);
};
1 голос
/ 22 октября 2017

Я решил эту проблему с новым окном, содержащим метку с именем MessageDisplay. Код, сопровождающий окно, был следующим:

public partial class StatusWindow : Window
{
    static StatusWindow display;

    public StatusWindow()
    {
        InitializeComponent();
    }

    static public void DisplayMessage( Window parent, string message )
    {
        if ( display != null )
            ClearMessage();
        display = new StatusWindow();
        display.Top = parent.Top + 100;
        display.Left = parent.Left + 10;
        display.MessageDisplay.Content = message;
        display.Show();
    }

    static public void ClearMessage()
    {
        display.Close();
        display = null;
    }
}

Для моего приложения настройка top и left помещает это окно под меню в главном окне (передается в DisplayMessage в первом параметре);

0 голосов
/ 21 августа 2014

Это решение не полностью работало для моего окна - оно было слишком низким, а нижняя часть окна находилась под панелью задач и под рабочим пространством рабочего стола.Мне нужно было установить положение после визуализации содержимого окна:

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;
}

Кроме того, часть кадра была вне поля зрения, поэтому мне пришлось настроить на 5. Не уверен, почему это необходимо в моемситуация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...