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 でデータを渡す簡単な方法は、アプリケーションのプロパティ ディクショナリを使用することです。