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的记忆:如果你记得在关闭最后一个之前打开新窗口你应该是好的