WPF:如何从不同程序集中的窗口开始

我用谷歌搜索了它仍然无法使它工作

我有一个WPF应用程序,并希望从Main.xaml开始,它位于不同的程序集中。 两个组件都在同一位置。

我怎样才能做到这一点? 我从XAML中取出了StartupUri并尝试了这些和一些轻微的变化:

protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); StartupUri = new Uri("/CompanyName.VisualStudio.UI;CompanyName/VisualStudio/UI/DatabaseManager/Main.xaml", UriKind.Relative); //StartupUri = new Uri(@"pack://application:,,,/ CompanyName.VisualStudio.UI;CompanyName/VisualStudio/UI/DatabaseManager/Main.xaml"); } 

程序集的名称是“CompanyName.VisualStudio.UI”,名称空间是“CompanyName / VisualStudio / UI / DatabaseManager / Main.xaml”

有任何想法吗?

本文提供了一个干净的仅限XAML的解决方案。

 StartupUri="pack://application:,,,/assembly_name;component/path/file_name.xaml" 

哪里:

  • assembly_name是引用的程序集的名称,sans扩展名
  • path是组件所在的子文件夹; 如果组件位于项目根目录,则省略此元素
  • file_name是组件的文件名

例子:

 pack://application:,,,/UI;component/CalculatorView.xaml assembly - UI.dll path - none (file at project root) file_name - CalculatorView pack://application:,,,/MyApp.UI;component/Views/CalculatorView.xaml assembly - MyApp.UI.dll path - Views file_name - CalculatorView pack://application:,,,/UI;component/Views/External/CalculatorView.xaml assembly - UI.dll path - Views/External file_name - CalculatorView 

我会检查你的包URI。 以下是我试过的uri。 将’component’视为项目中的根文件夹,我将’FolderName’放在适当的文件夹名称中,或者如果Main.xaml位于项目的根目录中,则删除它。

StartupUri = new Uri(@"pack://application:,,,/CompanyName.VisualStudio.UI;component/FolderName/Main.xaml", UriKind.Absolute);

老问题,但这也有帮助:

 void App_Startup(object sender, StartupEventArgs e) { MainWindow = new YourWindow(some, arguments); MainWindow.Show(); } 

和我app.xaml:

  

关于ShutdownMode的记忆:如果你记得在关闭最后一个之前打开新窗口你应该是好的