如何设置WPF窗口的位置在桌面的右下angular?

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

我怎样才能find我的桌面右下angular的位置?

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

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

此代码在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

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

您的WPF窗口具有“ Top和“ Left属性以及“ Width和“ Height ,因此您可以设置相对于桌面位置的属性。

我的代码:

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

如果您希望窗口的大小发生更改,您可以使用该窗口的SizeChanged事件而不是Loaded 。 如果窗口的Window.SizeToContent设置为除SizeToContent.Manual之外的某个值,这个特别方便; 在这种情况下,它会调整,以适应内容,而留在angular落里。

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

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

我用一个包含名为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; } } 

对于我的应用程序,顶部和左侧的设置把这个窗口放在主窗口的菜单下面(在第一个参数中传递给DisplayMessage)。

上述解决scheme并没有完全适用于我的窗口 – 窗口太低,窗口的底部位于任务栏下方和桌面工作区下方。 我需要在窗口内容被渲染后设置位置:

 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.不知道为什么这是需要在我的情况。