Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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_Dialog - Fatal编程技术网

C# 在主窗口中居中新窗口

C# 在主窗口中居中新窗口,c#,wpf,dialog,C#,Wpf,Dialog,这可能是一个重复,但我谷歌它,并通过StackOverFlow查看,试图找到一个解决这个问题,但它仍然无法工作。 我正在尝试将窗口(输入对话框)居中放置在主窗口中。 它应该垂直居中,并且新窗口(对话框)的宽度必须是主窗口的宽度 这就是我迄今为止所尝试的: Application curApp = Application.Current; Window mainWindows = curApp.MainWindow; this.Left = mainWindows.Left; this.Top =

这可能是一个重复,但我谷歌它,并通过StackOverFlow查看,试图找到一个解决这个问题,但它仍然无法工作。 我正在尝试将窗口(输入对话框)居中放置在主窗口中。 它应该垂直居中,并且新窗口(对话框)的宽度必须是主窗口的宽度

这就是我迄今为止所尝试的:

Application curApp = Application.Current;
Window mainWindows = curApp.MainWindow;
this.Left = mainWindows.Left;
this.Top = mainWindows.Top + (mainWindows.ActualHeight - this.ActualHeight) / 2;
this.Width = mainWindows.ActualWidth;
上述代码位于对话框窗口的已加载事件中

虽然这会使其垂直居中,但不会将其放置在主窗口的确切中心(即,左侧属性不匹配)

请帮忙


以下是我如何调用该对话框:

var dialog = new MyDialog();
dialog.ShowMessage("Capture Amount", "Please enter the 'Capture Amount'");
if (dialog.ShowDialog() == true) {
    DialogResponse = dialog.ResponseAmount.ToString();

    CustomTitleMain = "Main Window: " + CurrencyCode.ToString() + " " + DialogResponse.ToString();
}

DialogResponse、CurrencyCode和ResponseAmount是属性。前两个是字符串,最后一个是十进制。

使用
System.Windows.WindowStartupLocation.CenterOwner
并设置对话框窗口的
Owner
属性

Window subWindow = new MyWindow();
subWindow.Owner = Application.Current.MainWindow;
subWindow.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;
subwindow.ShowDialog();

您可以在Init中设置对话框的启动位置,如:

Application curApp = Application.Current;
Window mainWindows = curApp.MainWindow;
this.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;
this.Owner = mainWindows;
this.Left = mainWindows.Left;
this.Top = mainWindows.Top + (mainWindows.ActualHeight - this.ActualHeight) / 2;
this.Width = mainWindows.ActualWidth;
或者在调用时设置它:

var dialog = new MyDialog();
dialog.Owner = Application.Current.MainWindow;
dialog.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner;
dialog.ShowMessage("Capture Amount", "Please enter the 'Capture Amount'");
if (dialog.ShowDialog() == true) {
    DialogResponse = dialog.ResponseAmount.ToString();

    CustomTitleMain = "Main Window: " + CurrencyCode.ToString() + " " + DialogResponse.ToString();
}

但请记住,您也可以通过xaml设置所有这些参数。在我看来,这使它更具可读性。

您需要像mainWindows.WindowsStartUplocation=System.Windows.WindowsStartUplocation.CenterOwner这样的东西;如果先设置
Width
属性,会有什么区别吗?不会,还是有点不对劲。@RohitPrakash我试过你的方法,但没有成功。事实上,我试过你的代码,它似乎工作正常。你能发布更多的代码吗?如何打开DialogWindow?这有助于我找到答案,我将接受您在xaml中的建议。非常感谢。