Программно изменить StartupUri - PullRequest
0 голосов
/ 09 сентября 2018

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

это то, что я пробовал до сих пор.

private void Application_Startup(object sender, StartupEventArgs e)
{
    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
    if (!string.IsNullOrEmpty(Settings.Default.CurrentEmailAddress) && !string.IsNullOrEmpty(Settings.Default.CurrentPassword))
    {
        StartupUri = new Uri(@"C:\Users\User1\Desktop\FoodExpiryWC\FoodExpiry\FoodExpiry\Views\UserSection\WelcomeScreen.xaml", UriKind.Relative);
    }
    else
    {
        StartupUri = new Uri(@"C:\Users\User1\Desktop\FoodExpiryWC\FoodExpiry\FoodExpiry\Views\RegisterViews\MainWindow.xaml");
    }
}

Однако я продолжаю получать две разные ошибки.

Когда я использую строку

StartupUri = new Uri(@"C:\Users\User1\Desktop\FoodExpiryWC\FoodExpiry\FoodExpiry\Views\UserSection\WelcomeScreen.xaml", UriKind.Relative);

Я получаю следующую ошибку

error version1

Когда я использую линию

StartupUri = new Uri(@"C:\Users\User1\Desktop\FoodExpiryWC\FoodExpiry\FoodExpiry\Views\RegisterViews\MainWindow.xaml");

Я получаю следующую ошибку

error version2

В любом случае, я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

По вдохновению @Jackdaw я нашел решение и понял свою ошибку.

Я использовал абсолютный путь, и IDE это не понравилось. Затем я изменил путь к следующему

StartupUri = new Uri(@"./Views/UserSection/WelcomeScreen.xaml", UriKind.Relative);

Конструктор экрана приветствия принял строковый параметр, поэтому я создал второй конструктор без параметров и использовал Settings.Default.CurrentEmailAddress

public WelcomeScreen()
        {
            InitializeComponent();
            this.DataContext = new WelcomeScreenViewModel(Settings.Default.CurrentEmailAddress);
        }
0 голосов
/ 09 сентября 2018

Попробуйте указать UriKind. Относительный для второго StartupUri и используйте относительный путь, как показано ниже:

if (!string.IsNullOrEmpty(Settings.Default.CurrentEmailAddress) && !string.IsNullOrEmpty(Settings.Default.CurrentPassword))
{
  StartupUri = new Uri(@"\FoodExpiry\FoodExpiry\Views\UserSection\WelcomeScreen.xaml", UriKind.Relative);
}
else
{
  StartupUri = new Uri(@"\FoodExpiry\FoodExpiry\Views\RegisterViews\MainWindow.xaml", UriKind.Relative);
}
...