WPF:如何从一个窗口开始在不同的装配
问题描述:
我GOOGLE了这一点,仍然无法得到它的工作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”而命名为“公司名称/ VisualStudio中/ UI /的DatabaseManager/Main.xaml“
任何想法?
答
我会检查你的包的URI。下面是我试试的uri。将'component'视为项目中的根文件夹,并将'FolderName'放在适当的文件夹名称中,或者如果Main.xaml位于项目的根目录中,请将其删除。
StartupUri = new Uri(@"pack://application:,,,/CompanyName.VisualStudio.UI;component/FolderName/Main.xaml", UriKind.Absolute);
答
This article给人一种干净仅XAML的解决方案。
StartupUri="pack://application:,,,/assembly_name;component/path/file_name.xaml"
其中:
- assembly_name是所引用的组件的名称,扩展SANS
- 路径是将组件所在的子文件夹;如果组件在项目的根,这个元素被省略
- 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
答
老问题,但this也很有帮助:
void App_Startup(object sender, StartupEventArgs e)
{
MainWindow = new YourWindow(some, arguments);
MainWindow.Show();
}
和我的App.xaml:
<Application
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="SDKSample.App"
Startup="App_Startup" />
并记住ShutdownMode:如果你还记得在关闭最后一个之前打开新窗口,你应该是不错的
我这样读为“WTF:...”;-) – Orbling 2010-11-24 15:31:30