【发布时间】:2019-07-07 10:43:31
【问题描述】:
我正在尝试从位于我的主窗口上的菜单控件打开另一个窗口,并且我希望此窗口的启动位置相对于主窗口居中。我通过将辅助窗口的 Owner 属性设置为我的主窗口并将 XAML 中的 WindowStartupLocation 属性设置为 CenterOwner 来实现这一点,如下所示:
PopupWindow about = new PopupWindow();
about.Owner = Application.Current.MainWindow;
about.Show();
about.Owner = null;
这样做的问题是,具有所有者的窗口似乎总是位于所有者之上,并且每当最小化所有者窗口时,拥有的窗口也会最小化。为了解决这个问题,我在显示窗口后删除了所有者。代码看起来运行良好,但也有点像 hack。
我知道有一种方法可以将启动位置设置为手动,然后计算窗口的位置,但是我从弹出控件启动辅助窗口,但我找不到方法引用除主窗口以外的窗口。我想我可以遍历 Windows 集合并检查一个属性以查看它是否是我需要的窗口,但这似乎比我在这里所做的更糟糕。
有更好或更标准的方法吗?
【问题讨论】:
-
您所描述的是一种简单的方法。您获取现有窗口的桌面坐标和大小,然后根据此信息计算新窗口的桌面坐标,同时还要考虑新窗口的初始大小。现有窗口可能是什么以及如何选择/识别/跟踪这种现有窗口/无论在很大程度上取决于您的应用程序逻辑/设计和使用场景,您的应用程序必须涵盖。没有一种黄金方法可以做到这一点,就像没有一种最好的给猫剥皮的方法一样。这一切都非常取决于。