2010-11-24 20 views
21

Googled esto y todavía no puede conseguir que funcioneWPF: Cómo iniciar desde una ventana en un montaje distinto

Tengo una aplicación WPF y quiero empezar desde Main.xaml que se encuentra en un montaje diferente . Ambos conjuntos están en la misma ubicación.

¿Cómo puedo hacer esto? Saqué la StartupUri desde el XAML y trató con estas y algunas ligeras variaciones:

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"); 

    } 

El nombre de la asamblea es "CompanyName.VisualStudio.UI" y el espacio de nombres es "NombreCompañía/VisualStudio/UI/DatabaseManager/Main.xaml "

¿Alguna idea?

+1

Lo leí como "WTF: ..." ;-) – Orbling

Respuesta

3

Verificaría el URI de tu paquete. A continuación está el uri que probaría. Piense en 'componente' como la carpeta raíz en su proyecto y donde coloque 'FolderName' ponga el nombre apropiado de la carpeta o elimínelo si Main.xaml está en la raíz del proyecto.

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

34

This article da una solución limpia XAML-solamente.

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

Donde:

  • assembly_name es el nombre del conjunto de referencia, la extensión sans
  • camino es la subcarpeta en la que reside el componente; si el componente está en la raíz del proyecto, se omite este elemento
  • nombre_archivo es el nombre del archivo del componente

Ejemplos:

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 
1

vieja pregunta, pero this también es útil:

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

y yo 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" /> 

y recuerde acerca de ShutdownMode: si recuerda abrir una nueva ventana antes de cerrar la última, debe ser bueno

Cuestiones relacionadas