有没有更好的方法相对于主窗口定位辅助窗口的启动位置?

时间:2019-07-07 10:43:31

标签: c# wpf

我正在尝试从位于主窗口上的菜单控件打开另一个窗口,并且我希望此窗口的启动位置相对于主窗口居中。通过将辅助窗口的Owner属性设置为我的主窗口,并将XAML中的WindowStartupLocation属性设置为CenterOwner来实现此目的,就像这样:

PopupWindow about = new PopupWindow();
about.Owner = Application.Current.MainWindow;
about.Show();
about.Owner = null;

此问题是拥有所有者的窗口似乎总是位于所有者的顶部,并且只要最小化“所有者”窗口,“拥有的”窗口也会最小化。为了解决这个问题,我在显示窗口后删除了所有者。该代码似乎可以正常工作,但也感觉有点像黑客。

我知道有一种方法可以通过将启动位置设置为手动,然后计算窗口的放置位置来实现,但是我正在从弹出控件中启动辅助窗口,但是我找不到方法引用主窗口以外的窗口。我想我可以遍历Windows集合并检查一个属性以查看是否是我需要的窗口,但这似乎比我在这里做的要差。

是否有更好或更标准的方法?

1 个答案:

答案 0 :(得分:1)

本身没有没有 “最佳” 的方式。它实际上没有任何内置功能。您可能会说,所有执行此操作的方法都是“ hacks”。一种标准的方法是获取主窗口的坐标,然后根据About窗口计算您希望其位置在何处。或者您也可以按照自己的方式做。这是一个简单的示例:

int width = mainwindow.getWidth() / 2;
int height = mainWindow.getHeight() / 2;
int locationWidth = width - about.getWidth() / 2;
int locationHeight = height - about.getHeight() / 2;

// Then set it
about.Location = new Cursor(locationWidth, locationHeight);

我不记得确切如何设置位置,因为我不在普通计算机上。但是你明白了。另外,我们执行width-about.getWidth()/ 2,因为在C#中,位置不是从中心设置的,而是从左上角设置的。希望对您有所帮助。