如何在主窗口之前显示对话窗口(例如登录/选项等)?
这是我尝试过的(它显然曾经有过,但现在不再有了):
XAML:
<Application ...
Startup="Application_Startup">
Run Code Online (Sandbox Code Playgroud)
申请:
public partial class App : Application
{
private void Application_Startup(object sender, StartupEventArgs e)
{
Window1 myMainWindow = new Window1();
DialogWindow myDialogWindow = new DialogWindow();
myDialogWindow.ShowDialog();
}
}
Run Code Online (Sandbox Code Playgroud)
结果:首先显示myDialogWindow.关闭时,Window1将按预期显示.但是当我关闭Window1时,应用程序根本没有关闭.
Gle*_*eno 74
这是适合我的完整解决方案:
在App.xaml中,我删除了StartupUri
东西,并添加了一个Startup
处理程序:
<Application x:Class="MyNamespace.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Startup="ApplicationStart">
</Application>
Run Code Online (Sandbox Code Playgroud)
在App.xaml.cs中,我按如下方式定义处理程序:
public partial class App
{
private void ApplicationStart(object sender, StartupEventArgs e)
{
//Disable shutdown when the dialog closes
Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;
var dialog = new DialogWindow();
if (dialog.ShowDialog() == true)
{
var mainWindow = new MainWindow(dialog.Data);
//Re-enable normal shutdown mode.
Current.ShutdownMode = ShutdownMode.OnMainWindowClose;
Current.MainWindow = mainWindow;
mainWindow.Show();
}
else
{
MessageBox.Show("Unable to load data.", "Error", MessageBoxButton.OK);
Current.Shutdown(-1);
}
}
}
Run Code Online (Sandbox Code Playgroud)
好的道歉,这是解决方案:
我的原始问题几乎起作用,只需添加一件事,从Application XAML中删除StartupUri,然后将Show添加到主窗口.
那是:
<Application x:Class="DialogBeforeMainWindow.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Startup="Application_Startup">
Run Code Online (Sandbox Code Playgroud)
上面,StartupUri已删除.
添加myMainWindow.Show():
public partial class App : Application
{
private void Application_Startup(object sender, StartupEventArgs e)
{
Window1 myMainWindow = new Window1();
DialogWindow myDialogWindow = new DialogWindow();
myDialogWindow.ShowDialog();
myMainWindow.Show();
}
}
Run Code Online (Sandbox Code Playgroud)
WPF 设置App.Current.MainWindow
为打开的第一个窗口。如果您可以控制辅助窗口构造函数,只需在App.Current.MainWindow = Null
那里设置。主窗口构建完成后,它将App.Current.MainWindow
按预期分配给属性,无需任何干预。
public partial class TraceWindow : Window
{
public TraceWindow()
{
InitializeComponent();
if (App.Current.MainWindow == this)
{
App.Current.MainWindow = null;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您无权访问,您仍然可以MainWindow
在主窗口的构造函数中进行设置。