WPF: как начать с окна в другой сборке - PullRequest
23 голосов
/ 24 ноября 2010

Я гуглил это и до сих пор не могу заставить его работать

У меня есть приложение WPF, и я хочу начать с Main.xaml, который находится в другой сборке. Обе сборки находятся в одном месте.

Как я могу это сделать? Я вынул StartupUri из XAML и попробовал с этими и некоторыми небольшими изменениями:

    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"

Есть идеи?

Ответы [ 3 ]

39 голосов
/ 09 ноября 2011

В этой статье приведено чистое решение только для XAML.

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

Где:

  • имя_сборки - это имя сборки, на которую имеется ссылка, без расширения
  • путь - подпапка, в которой находится компонент; если компонент находится в корне проекта, этот элемент отсутствует
  • имя_файла - это имя файла компонента

Примеры:

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 
3 голосов
/ 14 октября 2016

Старый вопрос, но это также полезно:

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: если вы не забываете открывать новое окно перед тем, как закрыть последнее, вам следует подойти

3 голосов
/ 24 ноября 2010

Я бы проверил ваш URI пакета. Ниже ури я попробую. Подумайте о «компоненте» как о корневой папке в вашем проекте, а там, где я поместил «Имя папки», укажите подходящее имя папки или удалите его, если Main.xaml находится в корне проекта.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...