WPF:如何从一个窗口开始在不同的装配

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“

任何想法?

+1

我这样读为“WTF:...”;-) – Orbling 2010-11-24 15:31:30

我会检查你的包的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:如果你还记得在关闭最后一个之前打开新窗口,你应该是不错的