У меня есть WPF-приложение с 3 файлами xaml: App.xaml, StartWindow.xaml и MainWindow.xaml. Если я запускаю приложение, я хочу показать StartWindow или MainWindow в зависимости от условия. Мое решение состоит в том, чтобы написать собственный метод Main в App.xaml.cs:
public static String DEBUG = "true";
[STAThread]
static void Main()
{
App app = new App();
if (/*condition*/)
app.Run(new MainWindow());
else
app.Run(new StartWindow());
}
Действие сборки свойства App.xaml установлено на «Страница». (Я следовал этому руководству: Руководство , хотя оно по-прежнему работает с StartupUri, установленным в "MainWindow.xaml" и без App ()).
Конструктор StartWindow имеет следующий код:
public StartWindow()
{
InitializeComponent();
Task.Run(() =>
{
// Some initialization code
Console.WriteLine(App.DEBUG);
Application.Current.Dispatcher.Invoke(() =>
{
MainWindow mainWindow = new MainWindow();
mainWindow.Show();
this.Close();
});
});
}
Это прекрасно работает на моей машине для разработки, но не на другой (Виртуальная машина с той же ОС и целевой .NetFramework установлена). Если я устанавливаю точку останова после Console.WriteLine (App.DEBUG), она выводит строку в обеих средах, но свойства выглядят по-разному, а также вскоре после этого выдает исключение:
Свойства точки останова:
Исключение (в тексте сказано, что "не удается найти ресурс" главное окно. xml ""):
Свойства точки останова на моей машине разработки, где она работает:
Почему он все еще ищет MainWindow . xml, или даже stanger mainwindow.xaml? И почему только на одной машине?