Подтвердить что ты не робот

WPF: как начать с окна в другой сборке

Я googled это и все еще не могу заставить его работать

У меня есть приложение 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"

Любые идеи?

4b9b3361

Ответ 1

Эта статья дает чистое решение 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 

Ответ 2

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

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

Ответ 3

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

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