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