我正在使用 Prism 7.1 WPF 和 Prism Unity。
在主要<prism:PrismApplication/>
运行之前,或者当主 Prism 窗口出现时,我希望有一个模式弹出窗口供用户输入一些数据。输入数据将用于用户登录,更重要的是,用于确定将哪些 Prism 模块加载到应用程序中。
我该怎么做呢?我曾尝试在以下PrismApplication
重载方法中显示自定义 WPF 窗口,但该窗口没有出现,或者整个应用程序关闭:
public partial class App : PrismApplication
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
}
protected override IModuleCatalog CreateModuleCatalog()
{
return base.CreateModuleCatalog();
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
}
protected override Window CreateShell()
{
return ServiceLocator.Current.GetInstance<MainWindow>();
}
protected override void OnInitialized()
{
base.OnInitialized();
}
}
例如,如果我在 CreateModuleCatalog() 中调用显示自定义 WPF 窗口,它将显示,但整个应用程序将关闭:
protected override IModuleCatalog CreateModuleCatalog()
{
LoginWindow loginWindow = new LoginWindow();
if (loginWindow.ShowDialog() == true)
{
// OK
}
else
{
// Cancel
}
return base.CreateModuleCatalog();
}
...如果我把调用放在 OnStartup() 中,它不会显示,直到所有其他覆盖都被执行并显示主 Prism 窗口(处理用户输入为时已晚):
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
LoginWindow loginWindow = new LoginWindow();
if (loginWindow.ShowDialog() == true)
{
// OK
}
else
{
// Cancel
}
}
我玩过不同的方法,改变了对基类方法的调用位置等,但似乎无法让它工作。谁能建议如何做到这一点?这样做的原因是,如果我不需要(基于用户输入),我不想将整个模块加载到应用程序中。谢谢....