教育部普通高等教育十二五国家级规划教材《C#程序设计及应用教程》第3版(包括简化版:《C#程序设计教程》第3版)第7章WPF应用程序入门2Ch7WPF应用程序入门7.1WPF应用程序和XAML标记7.2窗口和对话框7.3颜色7.4形状7.5画笔7.6属性7.7事件37.1WPF应用程序和XAML标记WPF(WindowsPresentationFoundation,Windows呈现基础)是微软推出的基于DirectX和GPU加速来实现的图形界面显示技术。其优势在于界面呈现,主要用它来开发在客户端运行的桌面应用程序。WPF应用程序使用XAML来描述界面。App类App类是从Application类继承的类。通过App类,可以定义在整个应用程序范围内都可以使用的资源和公共属性。例如:Applicationcurrent=App.Current;7.1WPF应用程序和XAML标记App类常用的属性、方法和事件457.1WPF应用程序和XAML标记WPF应用程序的关闭模式调用Shutdown方法会立即关闭WPF应用程序。Shutdown方法的典型用法为App.Current.Shutdown();ShutdownMode枚举类型指定应用程序的关闭模式。OnLastWindowCloseOnMainWindowCloseOnExplicitShutdown【例7-1】演示如何创建WPF应用程序67.1WPF应用程序和XAML标记XAML命名空间和x:前缀编程构造声明XAML命名空间解决了共享XAML标记和C#代码的问题。根元素和XAML命名空间一个XAML文件(扩展名为.xaml的文件)只能有一个根元素。x:Class用于为代码隐藏类指定CLR命名空间和类名;xmlns特性声明XAML默认的命名空间;x:前缀编程构造根元素的xmlns:x用于XAML命名空间映射,目的是为了通过x:前缀编程构造来声明可被其他XAML和C#代码引用的对象。x:Name通过特定子系统或FindName等方法,为运行时使用的XAML元素(即用C#代码引用XAML元素)提供标识。在XAML中映射自定义命名空间若在XAML中引用自定义对象,就必须在XAML中映射自定义命名空间。77.1WPF应用程序和XAML标记XAML基本语法XAML的语法与HTML的语法非常相似,即都是利用元素、特性(Attribute)和属性(Property)来描述元素对象的各种要素XAML最基本的语法为:对象名特性名1=值1特性名2=值2……/对象名XAML中的对象元素名称、特性名称以及属性名称都区分大小写。87.1WPF应用程序和XAML标记XAML基本语法对象元素语法对象是指类的实例,在XAML中用对象元素来描述。例如:ButtonName=OkButtonContent=确定/特性语法用特性(Attribute)来描述对象的属性(Property),特性名和特性值之间用赋值号(=)分隔,特性的值始终用包含在引号中的字符串来指定,引号默认用双引号,也可以是单引号,原则是“值”两边的引号必须匹配。例如:ButtonBackground=BlueForeground=RedContent=按钮1/特性语法还可用于描述事件成员。例如:ButtonClick=Button_ClickClickMe!/Button97.1WPF应用程序和XAML标记XAML基本语法属性语法:仅仅用特性语法无法来描述对象的某些属性,可以使用属性语法。一般格式为:类名.属性名/类名.属性名例如:ButtonBackground=BlueForeground=RedContent=右击观察快捷菜单Margin=73,108,74,115Button.ContextMenuContextMenuMenuItem快捷菜单项1/MenuItemMenuItem快捷菜单项2/MenuItem/ContextMenu/Button.ContextMenu/Button107.1WPF应用程序和XAML标记XAML基本语法集合语法如果某个属性采用集合类型,可以使用集合语法。例如:Window.BackgroundLinearGradientBrushLinearGradientBrush.GradientStopsGradientStopOffset=0.0Color=Red/GradientStopOffset=1.0Color=Blue//LinearGradientBrush.GradientStops/LinearGradientBrush/Window.BackgroundXAML内容属性内容属性的用途是为了简化标记,以便更直观地嵌套父/子元素。例如:TextBoxThisisaTextBox/TextBox相当于:TextBoxText=ThisisaTextBox/117.1WPF应用程序和XAML标记XAML基本语法内容属性和集合语法组合StackPanelButton按钮1/ButtonButton按钮2/Button/StackPanel类型转换器将用字符串进行设置的特性值转换为其他对象类型或基元值。例如:ButtonMargin=10,20,30,40Content=确定/相当于:ButtonContent=确定Button.MarginThicknessLeft=10Top=20Right=30Bottom=40//Button.Margin/Button127.1WPF应用程序和XAML标记XAML基本语法XAML中的空白处理XAML中的空白字符包括空格、换行符和制表符。默认情况下,XAML处理器会将所有空白字符(空格、换行符和制表符)自动转换为空格。另外,处理XAML时连续的空格将被替换为一个空格。如果希望保留文本字符串中的空格,可以在该元素的开始标记内添加xml:space=preserve特性。但是,要避免在根级别指定该特性,否则会影响XAML处理的性能。137.1WPF应用程序和XAML标记WPF设计器设计模式和拆分模式XAML编辑器属性窗口大纲视图14Ch7WPF应用程序入门7.1WPF应用程序和XAML标记7.2窗口和对话框7.3颜色7.4形状7.5画笔7.6属性7.7事件157.2窗口和对话框WPF窗口窗口分类WPF窗口由非工作区和工作区两部分构成,非工作区主要包括图标、标题、系统菜单、按钮和边框。标准窗口:包含工作区和非工作区的窗口无边框窗口:只有工作区部分浮动窗口:非工作区的右上角只有关闭按钮,不包括最小化、最大化和还原按钮工具窗口:比浮动窗口多了一个“铆钉”按钮。167.2窗口和对话框窗口生存周期窗口的生存期是指从第1次打开窗口到关闭窗口经历的一系列过程。在窗口的生存期中,会引发很多事件。名称说明Title属性获取或设置窗口标题Width属性、MinWidth属性、MaxWidth属性Height属性、Minheight属性、MaxHeight属性获取或设置窗口的宽、高以及最大宽度、最小宽度、最大高度和最小高度WindowStartupLocation属性获取或设置窗口初次显示时的屏幕位置Background属性获取或设置描述窗口背景的画笔(Brush)。可以利用【属性】窗口选择纯色、线性渐变、径向渐变等Foreground属性获取或设置描述窗口前景色的画笔(Brush)。可以利用【属性】窗口选择纯色、线性渐变、径向渐变等SourceInitialized事件在Loaded事件之前发生,在此事件中可以与Win32进行交互(HwndSource),如获取窗口句柄、初始化控件的样式等Loaded事件当元素布局完成并呈现时发生,此时已经可以与窗口交互Closing事件在窗口真正关闭前发生,可在此事件中取消窗口关闭177.2窗口和对话框激活窗口首次打开一个窗口时,该窗口便成为活动窗口。活动窗口是当前正在捕获用户输入(如键盘输入或鼠标单等)的窗口。当窗口变为活动窗口时,会引发Activated事件。注意,当第一次打开窗口时,只有在引发了Activated事件之后,才会引发Loaded和ContentRendered事件。另外要记住,在引发ContentRendered事件时,便可认为窗口已打开。当前活动窗口停用时引发Deactivated事件。利用IsActive属性可检查窗口是否处于活动状态。187.2窗口和对话框防止窗口激活在首次调用Show方法之前,将该窗口的ShowActivated属性设置为false。这样窗口便不会被激活,也不会引发窗口的Activated事件,而且当前激活的窗口仍然保持激活状态。创建并显示新窗口在C#代码中调用Show方法或者ShowDialog方法显示窗体。无模式窗口:调用Show方法,窗体显示后会立即执行该方法后面的语句,打开的窗口不会阻止用户与应用程序中的其他窗口交互。模式窗口:调用ShowDialog方法,在该窗口关闭之前,应用程序中的所有其他窗口都会被禁用,仅在该窗口关闭后,才继续执行ShowDialog方法后面的代码。对于“无模式”窗口,调用Hide方法即可将其隐藏起来。197.2窗口和对话框关闭窗口在C#代码中,直接调用Close方法即可关闭当前打开的窗口当窗口关闭时,会引发两个事件:Closing事件和Closed事件。窗口关联通过设置附属窗口的Owner属性让一个窗口拥有另一个窗口。例如:WindowownedWindow=newWindow();ownedWindow.Owner=this;ownedWindow.Show();通过这种方式建立关联之后,附属窗口就可以通过Owner属性的值来引用它的所有者窗口,所有者窗口也可以通过OwnedWindows属性的值来发现它拥有的全部窗口。207.2窗口和对话框在主窗口显示前先显示登录窗口或者欢迎窗口在主窗口显示前先显示另一个窗口,比如登录窗口或者欢迎窗口,当用户关闭登录窗口或者欢迎窗口后再显示主窗口,要达到这个目的,可以通过主窗口的SourceInitialized事件来实现。【例7-2】演示如何在主窗口显示前先显示登录窗口,同时演示窗口的基本用法。217.2窗口和对话框窗口的外观和行为窗口的外观是指用户看到的窗口表现形式,行为指用户与窗口交互的方式。窗口大小窗口大小由Width、MinWidth、MaxWidth、Height、MinHeight、MaxHeight以及SizeToContent等多个属性确定。窗口位置通过Left和Top属性获取或更改窗口相对于屏幕坐标的x和y位置。WindowStartupLocation属性设置窗口第一次显示时的初始位置,枚举值有:Manual(默认)、CenterScreen、CenterOwner。227.2窗口和对话框窗口顺序表示从屏幕内向外方向显示顺序的位置,称为z顺序。有两种z顺序:正常z顺序和最顶层z顺序。在最顶层z顺序中的窗口总是位于正常z顺序中的窗口之上。通过将窗口的Topmost属性设置为true可以使窗口位于最顶层z顺序中。237.2窗口和对话框对话框消息框调用MessageBox类的静态Show方法来显示消息框。MessageBox类的静态Show方法提供了多种重载形式,常用的重载形式有:publicstaticDialogResultShow(stringtext)publicstaticDialogResultShow(stringtext,stringcaption)publicstaticDialogResultShow(stringtext,stringca