web-dev-qa-db-ja.com

WPF-何らかの条件に基づいて起動ウィンドウを選択します

RunをクリックするかCtrl + F5を押してプログラムを実行するとき、チェック条件に基づいて異なるウィンドウを開くことは可能ですか?

つまり、ある条件が満たされている場合は特定のウィンドウを開きたいが、そうでない場合は別のウィンドウを開きたい。

ウィンドウを開く前に、次のような状態を最初に確認する必要があります

if(File.Exists(<path-to-file>)
    Open Window 1
else
    Open Window 2

これは可能ですか?

30
sai sindhu

app.xamlを調べます

削除する StartupUri="MainWindow.xaml"

追加 Startup="Application_Startup"新しいイベントハンドラー

<Application x:Class="YourProject.App"
             xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
             Startup="Application_Startup">

app.xaml.csの背後にあるフォームコードは、次のようなApplication_Startupを作成します。

    private void Application_Startup(object sender, StartupEventArgs e)
    {
        //add some bootstrap or startup logic 
        var identity = AuthService.Login();
        if (identity == null)
        {
            LoginWindow login = new LoginWindow();
            login.Show();
        }
        else
        {
            MainWindow mainView = new MainWindow();
            mainView.Show();
        }
    }
58
aifarfa

_App.xaml_を使用してアプリケーションを起動し、Nikhil Agrawalが言ったように、StartupUriを動的に変更できます。

ただし、public static void Main()からアプリケーションを起動できます。 _StartupUri="MainWindow.xaml"_の_App.xaml_属性を削除し、Programメソッドを含むMainクラスをプロジェクトに追加してから、プロジェクトプロパティに移動し、スタートアップオブジェクトを_YourAssemblyName.Program_に設定します。

_[STAThread]
public static void Main(string[] args)
{
    var app = new Application();
    var mainWindow = new MainWindow();
    app.Run(mainWindow);
}
_

注:STAThreadAttributeは必須です。デフォルトでWPFプロジェクトが派生Applicationクラスを作成する方法など、独自の派生バージョンAppが必要な場合は、Mainの代わりにApplicationでそれを使用できます。ただし、必要ない場合は、ベースApplicationクラスを直接使用して、派生クラスをプロジェクトから削除するだけです。

7
Gqqnbig

App.xamlApplication属性を持つStartupUriタグがあります。 App.xaml.csセクションにこのコードを書く必要があると思います

public App()
{
      // Your Code
}

StartUpUriを目的のxamlファイルに設定します。

1
Nikhil Agrawal