(2) WPF - アプリケーション

1. プログラムの実行プロセス:

  • (1) Application オブジェクトが構築されます。
  • (2) Runメソッドが呼び出されます。
  • (3) Application.Startup イベントがトリガーされる
  • (4) ユーザー コードは 1 つ以上の Window オブジェクトを構築します。
  • (5) Application.Shutdow メソッドが呼び出されます。
  • (6) Application.Exit イベントがトリガーされます。
  • (7) Run メソッドが実行を完了します。

アプリケーションを初期化するには 2 つの方法があります

通常は、Application オブジェクトのコンストラクターからアプリケーションを初期化するか、Startup イベントを処理することをお勧めします。これは、Application がここで内部初期化を行うためです (たとえば、Application.Current がコンストラクターに設定されていないため)。

2. エラー処理

回復不能な異常トラブルの場合

StackOverflowException : スタック オーバーフローのほとんどは、コードが無限ループに入ることが原因です。

OutofMemoryException : システムが低メモリで実行されているため、利用可能なリソースがほとんどなく、CLR が追加のバイトを割り当てることができない場合。このような場合、コードをジャストインタイムでコンパイルすることはできず、変数をボックス化することも、オブジェクトを割り当てることもできません。

ThreadAbortException : スレッドはアプリケーション コードが Thread.Abort を呼び出した場合にのみ終了するため、Thread.Abort を呼び出さない場合は ThreadAbortException も表示されません。

DispartcherUnhandledException は、
例外を処理するコードがない場合にアプリケーションに発生する例外を処理します。

<!--MyApp.xaml-->  
<Application ... DispatcherUnhandledException='Failure' />  
        //MyApp.xaml.cs  
        void Failure(object sender,DispatcheUnhandledExceptionEventArgs e){  
    // your custom logic  
}  
public class DispatcheUnhandledExceptionEventArgs  
        :DispatcherEventArgs{  
 public Wxception Excetion {get;}  
 public bool Handled {get;set;};  
}

3、窓

ウィンドウのライフサイクルの主なフェーズは次のとおりです。

  • (1) Window.Initialized イベントがトリガーされます。
  • (2) Window.Active イベントがトリガーされます。
  • (3) Window.Loaded イベントがトリガーされます。
  • (4) Window.ContentRendered イベントがトリガーされます。
  • (5) Window.CotentRendered イベントがトリガーされます。
  • (6) ユーザーはウィンドウを操作します。
  • (7) Window.Closing イベントがトリガーされます。
  • (8) Window.Unloaded イベントがトリガーされます。
  • (9) Window.Closed イベントがトリガーされます。

4. ナビゲーションとページ

3 つの概念:ナビゲーション ホスト、ナビゲーション コンテンツ、ログ(アプリケーションのナビゲーション アクションの追跡を担当)

画像の説明を追加してください

ナビゲーション ホスト: NavigationWindow は、WPF の既定のナビゲーション ホストです。NavigationWindow は Window を継承し、デフォルトのナビゲーション UI (戻るボタンなど) を追加します。そして、ナビゲーションを実装するために必要ないくつかの基本的な機能。NavigationWindow は、Window などのすべてのアプリケーション レベルの機能にアクセスできます。NavigationWindow を使用すると、SDI ナビゲーション ウィンドウ モデルを実現できます。ナビゲーションコンテンツ (データ オブジェクト、文字列やページなどの基本タイプなど) をホストできます

public class NavExample: NavigationWindow{  
 public NavExample(){  
     Mavigate(new Page1());//导航内容  
 }     
}

public class Page1:Page{  
public Page1(){  
        TextBlock block = new TextBlock();  
        Hyperlink link = new Hyperlink();  
        link.Click += LinkClicked;  
        link.Inlines.Add("Click for page 2");  
        block.Inlines.Add(link);  
        Content = block;  
        WindowTitle = "Page 1";  
    }  
    void LinkClicked(object sender,RoutedEventArgs e){  
        NavigationService.Navigate(new Page2());  
    }  
}

NavigationService オブジェクトは、ホストに依存しないナビゲーション操作へのアクセスを提供します。NavigationService は、ページがブラウザーでホストされているか NavigationWindow でホストされているかに関係なく、ナビゲーション操作を通常どおり処理します。

ログ:すべてを追跡します。

備考:
履歴:訪問したサイトの固定リスト、時間ベースの自動ブックマーク リスト;
ジャーナル:現在のセッションで訪問したサイトのリスト。

xaml を使用してナビゲーションを実装します

<!--page1.xaml-->
<page WindowTitle ='Page 1'>
<TextBlock>
<Hyperlink NavigateUri='page2.xaml'>
Click for page 2
</Hyperlink>
</TextBlock>
</page>

<!--page2.xaml-->
<Page WindowTitle='Page 2'>
</page>

<!--navexample.xaml-->

<NavigationWindow x:Class='EssentialWPF.NavExample' Source='page1.xaml'>

</NavigationWindow>

NavigationWindow の Source プロパティは、次のように最初のページ (Page1.xaml) の URI 名に設定できます。

スタートページ

<!--app.xaml-->
<Application x:Class='EssentialWPF.App' StartupUri='page1.xaml'>
</Application>

ページ間で状態を渡す

HTML では、サーバー上に状態を保存するか、クライアントの Cookie を使用してデータ転送を完了することによって、データが渡されます。WPF でデータを渡す簡単な方法は、アプリケーションのプロパティ ディクショナリを使用することです。

おすすめ

転載: blog.csdn.net/chen1083376511/article/details/131353669