我只是创建自己的AboutBox,并使用Window.ShowDialog()对其进行调用

如何将其相对于主窗口定位,即从顶部居中20px?

最佳答案

您可以简单地使用Window.LeftWindow.Top属性。从主窗口中读取它们,然后在调用ShowDialog()方法之前,将值(加上20 px或其他值)分配给AboutBox

AboutBox dialog = new AboutBox();
dialog.Top = mainWindow.Top + 20;

要使其居中,也可以只使用WindowStartupLocation属性。将此设置为 WindowStartupLocation.CenterOwner
AboutBox dialog = new AboutBox();
dialog.Owner = Application.Current.MainWindow; // We must also set the owner for this to work.
dialog.WindowStartupLocation = WindowStartupLocation.CenterOwner;

如果要使其水平居中而不是垂直居中(即固定的垂直位置),则必须在AboutBox加载后在EventHandler中执行此操作,因为您将需要根据AboutBox的宽度计算水平位置,只有在加载后才能知道。
protected override void OnInitialized(...)
{
    this.Left = this.Owner.Left + (this.Owner.Width - this.ActualWidth) / 2;
    this.Top = this.Owner.Top + 20;
}

10-08 09:04