如何将WPF窗口的位置设置为桌面的右下角?

问题描述 投票:52回答:7

我想在窗口启动时在TaskBar的时钟上方显示我的窗口。

如何找到桌面的右下角位置?

我使用此代码在Windows窗体应用程序中运行良好,但在WPF中无法正常工作:

var desktopWorkingArea = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea;
this.Left = desktopWorkingArea.Right - this.Width;
this.Top = desktopWorkingArea.Bottom - this.Height;
wpf window location
7个回答
106
投票

此代码在WPF中对Display 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
投票

要访问桌面矩形,可以使用Screen class-Screen.PrimaryScreen.WorkingArea属性是桌面的矩形。

您的WPF窗口具有TopLeft属性以及WidthHeight,因此您可以相对于桌面位置设置这些属性。


4
投票

如果希望窗口在尺寸改变时位于角落的stay,则可以使用窗口的SizeChanged事件而不是Loaded。如果窗口将Window.SizeToContent设置为SizeToContent.Manual以外的某个值,则这尤其方便。在这种情况下,它将停留在角落时进行调整以适合内容。

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

还请注意,您应减去ActualWidthActualHeight(而不是如其他答复中所示的WidthHeight)来处理更多可能的情况,例如在运行时在SizeToContent模式之间进行切换。] >


3
投票

我的代码:


1
投票

我通过一个包含名为MessageDisplay的标签的新窗口解决了这个问题。窗口附带的代码如下:


0
投票

上面的解决方案并不完全适用于我的窗口-太低了,窗口的底部在任务栏下方和桌面工作区下方。在渲染窗口内容之后,我需要设置位置:


0
投票

@@ Klaus78的答案是正确的。但是,由于这是第一件事,google会弹出,并且如果在屏幕分辨率经常变化的环境中工作,从而使您的应用在虚拟桌面或虚拟服务器上运行,并且当屏幕分辨率发生变化时,您仍然需要它来更新其位置,我发现链接到SystemEvents.DisplaySettingsChanged事件将是有益的。这是一个使用rx的示例,您可以将其放在视图的构造函数中。

© www.soinside.com 2019 - 2024. All rights reserved.