以编程方式更改StartupUri

时间:2018-09-09 17:51:11

标签: c# wpf mvvm xamlparseexception application-start

我有两个窗口,并取决于要显示一个条件的条件,否则我希望显示另一个窗口。

这是我到目前为止尝试过的。

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 :(得分:0)

尝试为第二个 StartupUri 指定 UriKind.Relative ,并使用如下相对路径:< / p>

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);
}

答案 1 :(得分:0)

在@Jackdaw的启发下,我想出了一个解决方案并意识到了我的错误。

我使用的是绝对路径,而IDE不喜欢它。然后,我将路径更改为以下

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

欢迎屏幕构造函数采用了字符串参数,因此我创建了第二个不带参数的构造函数,并使用Settings.Default.CurrentEmailAddress

public WelcomeScreen()
        {
            InitializeComponent();
            this.DataContext = new WelcomeScreenViewModel(Settings.Default.CurrentEmailAddress);
        }