我想在窗口启动时在TaskBar
的时钟上方显示我的窗口。
如何找到桌面的右下角位置?
我使用此代码在Windows窗体应用程序中运行良好,但在WPF中无法正常工作:
var desktopWorkingArea = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea;
this.Left = desktopWorkingArea.Right - this.Width;
this.Top = desktopWorkingArea.Bottom - this.Height;
此代码在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
要访问桌面矩形,可以使用Screen class-Screen.PrimaryScreen.WorkingArea
属性是桌面的矩形。
您的WPF窗口具有Top
和Left
属性以及Width
和Height
,因此您可以相对于桌面位置设置这些属性。
如果希望窗口在尺寸改变时位于角落的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();
}
还请注意,您应减去ActualWidth
和ActualHeight
(而不是如其他答复中所示的Width
和Height
)来处理更多可能的情况,例如在运行时在SizeToContent
模式之间进行切换。] >
我的代码:
我通过一个包含名为MessageDisplay的标签的新窗口解决了这个问题。窗口附带的代码如下:
上面的解决方案并不完全适用于我的窗口-太低了,窗口的底部在任务栏下方和桌面工作区下方。在渲染窗口内容之后,我需要设置位置:
@@ Klaus78的答案是正确的。但是,由于这是第一件事,google会弹出,并且如果在屏幕分辨率经常变化的环境中工作,从而使您的应用在虚拟桌面或虚拟服务器上运行,并且当屏幕分辨率发生变化时,您仍然需要它来更新其位置,我发现链接到SystemEvents.DisplaySettingsChanged事件将是有益的。这是一个使用rx的示例,您可以将其放在视图的构造函数中。