父窗口中的中心动态大小窗口

时间:2017-05-05 08:20:15

标签: c# wpf windows xaml

问题

由于子窗口动态大小,WindowStartupLocation属性不能很好地工作。它将子窗口置于中心,但在此之后,子窗口会改变其大小并开始从主窗口的底部“弹出”。

问题

如何将父窗口的子窗口放在中心,考虑到子窗口具有动态大小?

代码示例:
var window = new WindowDialog(MainWindow, "Title", new DialogAgent(), false)
            {
                WindowStartupLocation = WindowStartupLocation.CenterOwner,
                SizeToContent = SizeToContent.Height,
                ShowInTaskbar = false
            };

1 个答案:

答案 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;
    }
}