(二)WPF - 应用程序

一、运行程序的过程:

  • (1) Application 对象被构造出来。
  • (2)Run方法被调用。
  • (3)Application.Startup 事件被触发
  • (4)用户代码构造一个或多个 Window 对象。
  • (5)Application.Shutdow 方法被调用。
  • (6)Application.Exit 事件被触发。
  • (7)Run 方法完成执行。

初始化应用程序有两种方法

从 Application 对象的构造器中初始化应用程序,或者处理 Startup 事件通常更好,因为 Application 在这里才完成它的内部初始化(例如,Application.Current 不会在构造器中进行设置)。

二、错误处理

针对无法恢复的异常问题

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

三、窗口

窗口的生命周期的主要阶段:

  • (1)Window.Initalized 事件被触发;
  • (2)Window.Actived 事件被触发;
  • (3)Window.Loaded 事件被触发;
  • (4)Window.ContentRendered 事件被触发;
  • (5)Window.CotentRendered 事件被触发;
  • (6)用户和窗口进行交互;
  • (7)Window.Closing 事件被触发;
  • (8)Window.Unloaded 事件被触发;
  • (9)Window.Closed 事件被触发;

四、导航和页面

三个概念:导航宿主、导航内容、日志(负责跟踪应用程序的导航动作)

请添加图片描述

导航宿主: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 中;

日志: 跟踪所有东西。

备注:
历史(History): 所访问站点的一个固定列表,是一种以时间为基础的自动书签列表;
日志(Journal): 在当前会话中所访问站点的列表。

使用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 属性能被设置为第一个页面的 URI 名称(Page1.xaml),这样

启动页面

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

在页面之间传递状态

在HTML中,通过在服务器上保存状态来传递数据,或者利用客户端的 Cookie 来完成数据传递。在 WPF 中传递数据的一个简单的方式就是利用 Application 的 Properties 字典。

猜你喜欢

转载自blog.csdn.net/chen1083376511/article/details/131353669