由于子窗口动态大小,WindowStartupLocation属性不能很好地工作。它将子窗口置于中心,但在此之后,子窗口会改变其大小并开始从主窗口的底部“弹出”。
如何将父窗口的子窗口放在中心,考虑到子窗口具有动态大小?
代码示例:var window = new WindowDialog(MainWindow, "Title", new DialogAgent(), false)
{
WindowStartupLocation = WindowStartupLocation.CenterOwner,
SizeToContent = SizeToContent.Height,
ShowInTaskbar = false
};
答案 0 :(得分:1)
您可以尝试这样的事情:
ChildWindow cw = new ChildWindow();
cw.ShowInTaskbar = false;
cw.Owner = Application.Current.MainWindow;
cw.Show();
在XAML的子窗口中:
WindowStartupLocation="CenterScreen"
您可以尝试使用一种简单的方法使窗口居中,根据所有者窗口重新计算窗口的位置,并在Loaded事件结束时调用此方法,如下所示(Here用于讨论) :
private void CenterOwner()
{
if (Owner != null)
{
double top = Owner.Top + ((Owner.Height - this.ActualHeight) / 2);
double left = Owner.Left + ((Owner.Width - this.ActualWidth) / 2);
this.Top = top < 0 ? 0 : top;
this.Left = left < 0 ? 0 : left;
}
}