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