如何在 Prism 中不打开 MainWindow 的情况下创建模块目录和 Reigster 类型

Posted

技术标签:

【中文标题】如何在 Prism 中不打开 MainWindow 的情况下创建模块目录和 Reigster 类型【英文标题】:How to create Module Catalog and Reigster Types without opening the MainWindow in Prism 【发布时间】:2021-11-08 04:12:39 【问题描述】:

我正在为另一个应用程序编写一个 dll,我想在这个应用程序中实现我自己的按钮,该按钮将打开一个 dll,进而打开 WPF 表单。

问题是,当应用程序打开时,我想为用户稍后打开的 WPF 应用程序做一些事情。例如,我想创建模块目录。换句话说,我想在不打开主窗口的情况下初始化 WPF 应用程序。 由于从另一个 dll 打开 WPF,我创建了我的应用程序的一个实例:

    App app = new App();

我的 App 类基本上是这样的:

     public partial class App : PrismApplication
     
        protected override Window CreateShell()
        
            return Container.Resolve<MainWindow>();
        
    
        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        
    
        
    
        protected override IModuleCatalog CreateModuleCatalog()
        
           
        
    

所以我希望完成 CreateModuleCatalog 和 RegisterTypes 方法,但不想现在从 CreateShell 方法显示 MainWindow。

谁能告诉我如何处理这个问题?

【问题讨论】:

您真的需要防止您的主窗口被创建或仅仅显示吗?如果是后者,也许您可​​以使用 Visibility.Collapsed 创建它,然后让 DLL 稍后触发更改其可见性。 乔,谢谢!这是我会考虑的方式之一! 【参考方案1】:

如果您从CreateShell() 返回null,则没有可显示的窗口。

您也可以覆盖OnInitialized()。这是 Prism 默认调用 MainWindow?.Show() 的地方。

话虽如此,始终尽快显示某种启动窗口是一个好习惯。

【讨论】:

以上是关于如何在 Prism 中不打开 MainWindow 的情况下创建模块目录和 Reigster 类型的主要内容,如果未能解决你的问题,请参考以下文章

WPF Prism 框架中,TabControl 作为Region时如何设置Header

Prism基础知识 学习Region

Prism框架的Regions使用

WPF MVVM模式不用Prism

Prism 基础知识学习模块化

qt c++ QChart->setGeometry 在 MainWindow 中不起作用