首页 > 解决方案 > 如果启动窗口位于不同的项目/库中,如何在 App.xaml 中设置 StartupUri?

问题描述

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

解决方案树

我试图弄清楚如何定义StartupUriin App.xaml,这BrowserView.xaml将是一个启动窗口。

我发现的唯一方法是在这里,但是当我输入时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'。

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。我究竟做错了什么?

标签: c#wpfxamlviewstartup

解决方案


StartupUri您可以在中删除App.xaml和管理应用程序启动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);
    }
}

推荐阅读