我希望在窗口启动时将窗口显示在TaskBar
的时钟之上。
如何找到桌面右下角的位置?
我使用此代码在Windows窗体应用程序中运行良好但在WPF中无法正常工作:
var desktopWorkingArea = System.Windows.Forms.Screen.PrimaryScreen.WorkingArea;
this.Left = desktopWorkingArea.Right - this.Width;
this.Top = desktopWorkingArea.Bottom - this.Height;
答案 0 :(得分:99)
此代码适用于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
答案 1 :(得分:10)
要访问桌面矩形,您可以使用Screen class - Screen.PrimaryScreen.WorkingArea
属性是桌面的矩形。
您的WPF窗口包含Top
和Left
属性以及Width
和Height
,因此您可以相对于桌面位置设置这些属性。
答案 2 :(得分:4)
如果您希望窗口在其大小发生变化时保持,则可以使用窗口的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 :(得分:3)
我的代码:
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);
};
答案 4 :(得分:1)
我用一个包含名为MessageDisplay的标签的新窗口解决了这个问题。窗口附带的代码如下:
"Text": null,
"Text2": null,
"Text3": 'http://placehold.it/250x250',
"Text4": null,
对于我的应用程序,top和left的设置将此窗口置于主窗口的菜单下方(在第一个参数中传递给DisplayMessage);
答案 5 :(得分:0)
以上解决方案对我的窗口并不完全有效 - 它太低了,窗口的底部位于任务栏下方和桌面工作区下方。我需要在窗口内容呈现后设置位置:
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.不确定为什么在我的情况下需要这样做。
答案 6 :(得分:0)
@ Klaus78的答案是正确的。但是,由于这是第一件事,google会弹出,并且如果在屏幕分辨率经常变化的环境中工作,以使您的应用在虚拟桌面或虚拟服务器上运行,并且当屏幕分辨率发生变化时,您仍然需要它来更新其位置。 SystemEvents.DisplaySettingsChanged事件将是有益的。这是一个使用rx的示例,您可以将其放在视图的构造函数中。
NativeLongByReference