Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在父窗口中居中动态大小窗口 问题_C#_Wpf_Windows_Xaml - Fatal编程技术网

C# 在父窗口中居中动态大小窗口 问题

C# 在父窗口中居中动态大小窗口 问题,c#,wpf,windows,xaml,C#,Wpf,Windows,Xaml,由于子窗口的动态大小,属性WindowsStartUpLocation无法正常工作。它将子窗口放在中间,但在此之后,子窗口会改变其大小,并开始从主窗口的底部弹出 问题 考虑到子窗口具有动态大小,如何将父窗口的子窗口置于中心 代码示例: var window = new WindowDialog(MainWindow, "Title", new DialogAgent(), false) { WindowStartupLo

由于子窗口的动态大小,属性WindowsStartUpLocation无法正常工作。它将子窗口放在中间,但在此之后,子窗口会改变其大小,并开始从主窗口的底部弹出

问题 考虑到子窗口具有动态大小,如何将父窗口的子窗口置于中心

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

您可以尝试以下方法:

ChildWindow cw = new ChildWindow();
cw.ShowInTaskbar = false;
cw.Owner = Application.Current.MainWindow;
cw.Show();
在XAML的子窗口中:

WindowStartupLocation="CenterScreen" 
您可以尝试使用一个简单的方法将窗口居中,以根据所有者窗口重新计算窗口的位置,并在加载的事件结束时调用此方法,如下所示:

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

你不能提供示例代码吗?当然,在这里。这就是我试图做的,但仍然不能正常工作:哦,CenterOwner方法确实解决了我的问题:谢谢。另外,我在想我在属性字段WindowsStartUplocation上做错了什么