如何设置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(); }
还要注意,应该减去ActualWidth
和ActualHeight
(而不是像其他答复中所示的Width
和Height
)来处理更多可能的情况,例如在运行时间切换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.不知道为什么这是需要在我的情况。