如果启动窗口位于不同的项目/库中,如何在 App.xaml 中设置 StartupUri?

Posted

技术标签:

【中文标题】如果启动窗口位于不同的项目/库中,如何在 App.xaml 中设置 StartupUri?【英文标题】:How to setup StartupUri in App.xaml, if the startup window is in a different project/library? 【发布时间】:2019-08-09 04:00:22 【问题描述】:

下面是我的解决方案树,你可以看到,App.xamlG_Hoover.Init 项目中,BrowserView.xaml 窗口在 G_Hoover.Views 项目中.

我想弄清楚如何在App.xaml 中定义StartupUri,即BrowserView.xaml 将是一个启动窗口。

我找到is here的唯一方法,但是当我输入App.xaml时:

StartupUri="C:/Users/asus/Desktop/IT/Programowanie/Projekty/G_Hoover/G_Hoover.Views/BrowserView.xaml"

我收到一个异常:

XamlObjectWriterException:指定的类名 'G_Hoover.Views.BrowserView' 与实际根实例类型不匹配 'System.Windows.Window'。删除 Class 指令或提供 通过 XamlObjectWriterSettings.RootObjectInstance 实例。

当我输入时:

StartupUri="pack://application:,,,/G_Hoover;G_Hoover.Views/BrowserView.xaml">

我收到异常:

System.IO.IOException: '找不到资源 'g_hoover;g_hoover.views/browserview.xaml'。'

当我根据this approach 输入App.xaml.cs 时,我得到的结果相同:

public partial class App : Application


    protected override void OnStartup(StartupEventArgs e)
    
        StartupUri = new Uri("pack://application:,,,/" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Name + ";G_Hoover.Views/BrowserView.xaml", UriKind.RelativeOrAbsolute);
        //or this: StartupUri = new Uri("pack://application:,,,/G_Hoover;G_Hoover.Views/BrowserView.xaml", UriKind.RelativeOrAbsolute);
        //or this: StartupUri = new Uri("C:/Users/asus/Desktop/IT/Programowanie/Projekty/G_Hoover/G_Hoover.Views/BrowserView.xaml");
    

请注意,G_Hoover.Init 引用了 G_Hoover.Views。我做错了什么?

【问题讨论】:

【参考方案1】:

您可以从App.xaml 中删除StartupUri,并在App.xaml.cs 中管理应用启动。

例如:

public partial class App : Application


    protected override void OnStartup(StartupEventArgs e)
    
        var startupView = new G_Hoover.Views.BrowserView.xaml();
        startupView.ShowDialog();

        base.OnStartup(e);
    

【讨论】:

实际上它起作用了,而且比我预期的要简单。谢谢。

以上是关于如果启动窗口位于不同的项目/库中,如何在 App.xaml 中设置 StartupUri?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过单击tkinter中不同窗口中的按钮来获取位于窗口中的GUI文本字段的参数? [重复]

界面生成器在对象库中有不同的项目?

如何从库中访问 :app 类?

EGit 的“自动共享位于 git 存储库中的项目”选项是啥意思?

如何为 Spring Boot 启动器拆分库中的代码

更改启动窗口