版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、教育部普通高等教育十二五國家級規(guī)劃教材教育部普通高等教育十二五國家級規(guī)劃教材C#程序設(shè)計教程程序設(shè)計教程第第3版版第第7章章 WPF應(yīng)用程序入門應(yīng)用程序入門2Ch7 WPF應(yīng)用程序入門應(yīng)用程序入門7.1 WPF應(yīng)用程序和應(yīng)用程序和XAML標(biāo)記標(biāo)記7.2 窗口和對話框窗口和對話框7.3 顏色顏色7.4 形狀形狀7.5 畫筆畫筆7.6 屬性和事件屬性和事件37.1 WPF應(yīng)用程序和應(yīng)用程序和XAML標(biāo)記標(biāo)記lWPF(Windows Presentation Foundation,Windows呈現(xiàn)呈現(xiàn)基礎(chǔ))是微軟推出的基于基礎(chǔ))是微軟推出的基于DirectX和和GPU加速來實現(xiàn)的圖形界面加速來實現(xiàn)
2、的圖形界面顯示技術(shù)顯示技術(shù)。其其優(yōu)勢在于界面呈現(xiàn),優(yōu)勢在于界面呈現(xiàn),主要用主要用它來開發(fā)在客戶端運(yùn)行的桌面應(yīng)用它來開發(fā)在客戶端運(yùn)行的桌面應(yīng)用程序程序。WPF應(yīng)用程序使用應(yīng)用程序使用XAML來描述界面來描述界面。lWPF運(yùn)行仍然從運(yùn)行仍然從Main方法入口方法入口在在App.xaml.cs文件中,可以查看隱藏的文件中,可以查看隱藏的Main方法方法在在App.xaml文件中,可以通過更改文件中,可以通過更改StartupUri屬性的值改變起始屬性的值改變起始窗體。窗體。7.1 WPF應(yīng)用程序和應(yīng)用程序和XAML標(biāo)記標(biāo)記lApp類類App類是從類是從Application類繼承的類類繼承的類。通過
3、。通過App類,可以定義在整類,可以定義在整個應(yīng)用程序范圍內(nèi)都可以使用的資源和公共屬性個應(yīng)用程序范圍內(nèi)都可以使用的資源和公共屬性。u例如:例如:Application current = Application current = App.CurrentApp.Current; ;App類常用類常用的的屬性、方法和事件屬性、方法和事件457.1 WPF應(yīng)用程序和應(yīng)用程序和XAML標(biāo)記標(biāo)記l WPF應(yīng)用程序的關(guān)閉模式應(yīng)用程序的關(guān)閉模式調(diào)用調(diào)用Shutdown方法會立即關(guān)閉方法會立即關(guān)閉WPF應(yīng)用程序。應(yīng)用程序。Shutdown方法的典型用法為方法的典型用法為App.Current.Shutdow
4、n();若要控制關(guān)閉模式,可以使用若要控制關(guān)閉模式,可以使用Shutdown方法的重載形式,使用方法的重載形式,使用ShutdownMode枚舉枚舉指定應(yīng)用程序的關(guān)閉模式。指定應(yīng)用程序的關(guān)閉模式。uOnLastWindowCloseOnLastWindowCloseuOnMainWindowCloseOnMainWindowCloseuOnExplicitShutDownOnExplicitShutDownl【例【例7-1】 演示如何創(chuàng)建演示如何創(chuàng)建WPF應(yīng)用程序應(yīng)用程序67.1 WPF應(yīng)用程序和應(yīng)用程序和XAML標(biāo)記標(biāo)記lXAML是一種基于是一種基于XML的標(biāo)記性語言,默認(rèn)的標(biāo)記性語言,默認(rèn)
5、UTF-8編碼。編碼。lx:前綴編程構(gòu)造前綴編程構(gòu)造xmlns特性聲明特性聲明XAML默認(rèn)的命名空間;默認(rèn)的命名空間;xmlns:x用于命名空間映射。用于命名空間映射。u一一個個XAMLXAML文件(擴(kuò)展名為文件(擴(kuò)展名為. .xamlxaml的文件)只能有一個根元素。的文件)只能有一個根元素。 x:Class用于為代碼隱藏類指定用于為代碼隱藏類指定CLR命名空間和類名命名空間和類名 ;Name特性指定對象的名稱屬性。特性指定對象的名稱屬性。u Button Content=Button /X:Name特性為運(yùn)行時(特性為運(yùn)行時(C#代碼引用代碼引用XAML元素元素)使用的)使用的XAML元素
6、提供標(biāo)識。元素提供標(biāo)識。uButton /7.1 WPF應(yīng)用程序和應(yīng)用程序和XAML標(biāo)記標(biāo)記l在在XAML中映射自定義命名空間中映射自定義命名空間 若在若在XAML中引用自定義對象,就必須在中引用自定義對象,就必須在XAML中映射自定義命中映射自定義命名空間名空間。l例如:例如:第一步:定義第一步:定義公共公共類類MyClass(假設(shè)在假設(shè)在命名空間命名空間Ch07.cs下)下)第二步:在第二步:在TestWindow.xaml中引用中引用MyClass 時,需要在根元時,需要在根元素中為其指定素中為其指定XAML命名空間。命名空間。uwindow 其中其中c c為自定義前綴,也可以換成其他字
7、符串為自定義前綴,也可以換成其他字符串2021年11月20日星期六7在在XAML中映射自定義命名空間中映射自定義命名空間 2021年11月20日星期六87.1 WPF應(yīng)用程序和應(yīng)用程序和XAML標(biāo)記標(biāo)記lXAML基本語法基本語法 XAML的語法與的語法與HTML的語法非常相似,即都是利用元素、特性的語法非常相似,即都是利用元素、特性(Attribute)和屬性()和屬性(Property)來描述元素對象的各種要素)來描述元素對象的各種要素XAML最基本的語法為:最基本的語法為:u 或者:或者:u ” /XAML中的對象元素名稱、特性名稱以及屬性名稱都中的對象元素名稱、特性名稱以及屬性名稱都區(qū)分
8、大小寫區(qū)分大小寫。9107.1 WPF應(yīng)用程序和應(yīng)用程序和XAML標(biāo)記標(biāo)記lXAML基本語法基本語法 l對象元素語法對象元素語法 對象是指類的實例,在對象是指類的實例,在XAML中用對象元素來描述。中用對象元素來描述。u例如:例如: / l特性語法特性語法 用特性(用特性(Attribute)來描述對象的屬性()來描述對象的屬性(Property),特性名和特性值之),特性名和特性值之間用間用=分隔,特性的值始終用包含在引號中的字符串來指定,引號默認(rèn)用分隔,特性的值始終用包含在引號中的字符串來指定,引號默認(rèn)用雙引號,也可以是單引號,原則是雙引號,也可以是單引號,原則是“值值”兩邊的引號必須匹配
9、兩邊的引號必須匹配 。u例如例如: 1/ 特性語法還可用于描述事件成員特性語法還可用于描述事件成員 。u例如:例如:Button Click=Click Me!Click Me! 117.1 WPF應(yīng)用程序和應(yīng)用程序和XAML標(biāo)記標(biāo)記lXAML基本語法基本語法 屬性語法:僅僅用特性語法無法來描述對象的某些屬性,可以使用屬性屬性語法:僅僅用特性語法無法來描述對象的某些屬性,可以使用屬性語法。語法。一般格式為:一般格式為: 例如:例如:Button Background=Blue Foreground=Red Margin=73,108,74,115 快捷菜單項快捷菜單項11 快捷菜單項快捷菜單項
10、22 127.1 WPF應(yīng)用程序和應(yīng)用程序和XAML標(biāo)記標(biāo)記lXAML基本語法基本語法 集合語法集合語法如果某個屬性采用集合類型,可以使用集合語法如果某個屬性采用集合類型,可以使用集合語法 。例如:。例如: Offset=0.0 Color=Red / Offset=1.0 Color=Blue / / / / XAML內(nèi)容屬性內(nèi)容屬性 內(nèi)容內(nèi)容屬性的用途是為了簡化標(biāo)記,以便更直觀地嵌套父屬性的用途是為了簡化標(biāo)記,以便更直觀地嵌套父/子元素。例子元素。例如:如: This is a Text BoxThis is a Text Box 相當(dāng)于:相當(dāng)于: Text=This is a Text
11、Box/137.1 WPF應(yīng)用程序和應(yīng)用程序和XAML標(biāo)記標(biāo)記lXAML基本語法基本語法 內(nèi)容屬性和集合語法組合內(nèi)容屬性和集合語法組合 按鈕按鈕11 按鈕按鈕22類型轉(zhuǎn)換器類型轉(zhuǎn)換器 將用字符串進(jìn)行設(shè)置的特性值轉(zhuǎn)換為其他對象類型或基元值。例如:將用字符串進(jìn)行設(shè)置的特性值轉(zhuǎn)換為其他對象類型或基元值。例如:Button Margin=10,20,30,40 Content= / 相當(dāng)于相當(dāng)于: :Button Content= 147.1 WPF應(yīng)用程序和應(yīng)用程序和XAML標(biāo)記標(biāo)記lXAML基本語法基本語法 XAML中的空白處理中的空白處理 uXAMLXAML中的空白字符包括空格、換行符和制表符。
12、中的空白字符包括空格、換行符和制表符。默認(rèn)情況下,默認(rèn)情況下,XAML處理器會將所有空白字符(空格、換行符和制表處理器會將所有空白字符(空格、換行符和制表符)自動轉(zhuǎn)換為空格。另外,處理符)自動轉(zhuǎn)換為空格。另外,處理XAML時連續(xù)的空格將被替換為一個時連續(xù)的空格將被替換為一個空格。空格。如果希望保留文本字符串中的空格,可以在該元素的開始標(biāo)記內(nèi)添加如果希望保留文本字符串中的空格,可以在該元素的開始標(biāo)記內(nèi)添加xml:space=preserve特性。但是,要避免在根級別指定該特性,否則特性。但是,要避免在根級別指定該特性,否則會影響會影響XAML處理的性能。處理的性能。 157.2 窗口和對話框窗口
13、和對話框lWPF窗口窗口 窗口的類型:窗口的類型:WPF窗口(窗口)和窗口(窗口)和WPF導(dǎo)航窗口(導(dǎo)航窗口(WPF頁)頁)窗口分類窗口分類WPF窗口由非工作區(qū)和工作區(qū)兩部分構(gòu)成窗口由非工作區(qū)和工作區(qū)兩部分構(gòu)成 ,非工作區(qū)主要包括圖標(biāo)、標(biāo),非工作區(qū)主要包括圖標(biāo)、標(biāo)題、系統(tǒng)菜單、按鈕和邊框題、系統(tǒng)菜單、按鈕和邊框 。 u標(biāo)準(zhǔn)窗口:包含工作區(qū)和非工作區(qū)的窗口標(biāo)準(zhǔn)窗口:包含工作區(qū)和非工作區(qū)的窗口 u無邊框窗口:只有工作區(qū)部分無邊框窗口:只有工作區(qū)部分 u浮動窗口:非工作區(qū)的右上角只有關(guān)閉按鈕,不包括最小化、最浮動窗口:非工作區(qū)的右上角只有關(guān)閉按鈕,不包括最小化、最大化和還原按鈕大化和還原按鈕 u工具
14、窗口:比浮動窗口多了一個工具窗口:比浮動窗口多了一個“鉚釘鉚釘”按鈕。按鈕。 167.2 窗口和對話框窗口和對話框l創(chuàng)建并顯示新窗口創(chuàng)建并顯示新窗口在在C#代碼中調(diào)用代碼中調(diào)用Show方法或者方法或者ShowDialog方法顯示窗體方法顯示窗體。 u無模式窗口:調(diào)用無模式窗口:調(diào)用ShowShow方法,窗體顯示后會立即執(zhí)行該方法后面的方法,窗體顯示后會立即執(zhí)行該方法后面的語句,打開的窗口不會阻止用戶與應(yīng)用程序中的其他窗口交互。語句,打開的窗口不會阻止用戶與應(yīng)用程序中的其他窗口交互。u模式窗口:調(diào)用模式窗口:調(diào)用ShowDialogShowDialog方法方法 ,在該窗口關(guān)閉之前,應(yīng)用程序,在該
15、窗口關(guān)閉之前,應(yīng)用程序中的所有其他窗口都會被禁用,僅在該窗口關(guān)閉后,才繼續(xù)執(zhí)行中的所有其他窗口都會被禁用,僅在該窗口關(guān)閉后,才繼續(xù)執(zhí)行ShowDialogShowDialog方法后面的代碼。方法后面的代碼。對于對于“無模式無模式”窗口,調(diào)用窗口,調(diào)用Hide方法即可將其隱藏起來。方法即可將其隱藏起來。 177.2 窗口和對話框窗口和對話框l關(guān)閉窗口關(guān)閉窗口 在在C#代碼中,直接調(diào)用代碼中,直接調(diào)用Close方法即可關(guān)閉當(dāng)前打開的窗口方法即可關(guān)閉當(dāng)前打開的窗口當(dāng)窗口關(guān)閉時當(dāng)窗口關(guān)閉時,會,會引發(fā)兩個事件:引發(fā)兩個事件:Closing事件事件和和Closed事件。事件。 l窗口關(guān)聯(lián)窗口關(guān)聯(lián) 通過通
16、過設(shè)置附屬窗口的設(shè)置附屬窗口的Owner屬性讓一個窗口擁有另一個窗口屬性讓一個窗口擁有另一個窗口 。例如:例如:Window Window ownedWindowownedWindow = new Window(); = new Window();ownedWindow.OwnerownedWindow.Owner = this; = this;ownedWindow.ShowownedWindow.Show();(); 通過這種方式建立關(guān)聯(lián)之后,附屬窗口就可以通過通過這種方式建立關(guān)聯(lián)之后,附屬窗口就可以通過Owner屬性的值來引用屬性的值來引用它的所有者窗口,所有者窗口也可以通過它的所有者窗
17、口,所有者窗口也可以通過OwnedWindows屬性的值來發(fā)屬性的值來發(fā)現(xiàn)它擁有的全部窗口?,F(xiàn)它擁有的全部窗口。 187.2 窗口和對話框窗口和對話框l在主窗口顯示前先顯示登錄窗口或者歡迎窗口在主窗口顯示前先顯示登錄窗口或者歡迎窗口 在主窗口顯示前先顯示另一個窗口,比如登錄窗口或者歡迎窗口,當(dāng)用戶在主窗口顯示前先顯示另一個窗口,比如登錄窗口或者歡迎窗口,當(dāng)用戶關(guān)閉登錄窗口或者歡迎窗口后再顯示主窗口,要達(dá)到這個目的,可以通過關(guān)閉登錄窗口或者歡迎窗口后再顯示主窗口,要達(dá)到這個目的,可以通過主窗口的主窗口的SourceInitialized事件事件來實現(xiàn)。來實現(xiàn)。 【例例7-2】 演示如何在主窗口顯
18、示前先顯示登錄窗口,同時演示窗演示如何在主窗口顯示前先顯示登錄窗口,同時演示窗口的基本用法??诘幕居梅ā?197.2 窗口和對話框窗口和對話框l窗口的外觀和行為窗口的外觀和行為窗口大小窗口大小u窗口大小由窗口大小由WidthWidth、MinWidthMinWidth、MaxWidthMaxWidth、HeightHeight、MinHeightMinHeight、MaxHeightMaxHeight以及以及SizeToContentSizeToContent等多個屬性確定。等多個屬性確定。窗口位置窗口位置u通過通過LeftLeft和和TopTop屬性獲取或更改窗口相對于屏幕坐標(biāo)的屬性獲取或
19、更改窗口相對于屏幕坐標(biāo)的x x和和y y位置。位置。 uWindowStartupLocationWindowStartupLocation屬性設(shè)置窗口第一次顯示時的初始位置,枚屬性設(shè)置窗口第一次顯示時的初始位置,枚舉值有:舉值有:ManualManual(默認(rèn))、(默認(rèn))、CenterScreenCenterScreen、CenterOwnerCenterOwner。 207.2 窗口和對話框窗口和對話框l窗口順序窗口順序表示從屏幕內(nèi)向外方向顯示順序的位置,稱為表示從屏幕內(nèi)向外方向顯示順序的位置,稱為z順序。順序。u有兩種有兩種z z順序:正常順序:正常z z順序和最頂層順序和最頂層z z順
20、序。順序。在最頂層在最頂層z順序中的窗口總是位于正常順序中的窗口總是位于正常z順序中的窗口之上。順序中的窗口之上。通過將窗口的通過將窗口的Topmost屬性設(shè)置為屬性設(shè)置為true可以使窗口位于最頂層可以使窗口位于最頂層z順序中。順序中。 217.2 窗口和對話框窗口和對話框l對話框?qū)υ捒蛳⒖蛳⒖蛘{(diào)用調(diào)用MessageBox類的靜態(tài)類的靜態(tài)Show方法來顯示消息框方法來顯示消息框 。MessageBox類的靜態(tài)類的靜態(tài)Show方法提供了多種重載形式,常用的重方法提供了多種重載形式,常用的重載形式有:載形式有:upublic static MessageBoxResult Show(stri
21、ng text)public static MessageBoxResult Show(string text)upublic static MessageBoxResult Show(string text, public static MessageBoxResult Show(string text, string caption)string caption)upublic static MessageBoxResult Show(string text, public static MessageBoxResult Show(string text, string caption,
22、MessageBoxButton buttons, string caption, MessageBoxButton buttons, MessageBoxImage icon) MessageBoxImage icon) 227.2 窗口和對話框窗口和對話框【例例7-3】 演示如何在演示如何在WPF應(yīng)用程序中彈出消息框以及獲取消應(yīng)用程序中彈出消息框以及獲取消息框返回的值。息框返回的值。 237.2 窗口和對話框窗口和對話框l通用對話框通用對話框OpenFileDialog對話框:用戶選擇一個或多個要打開的文件的對話框:用戶選擇一個或多個要打開的文件的文件名。文件名。SaveFileDialo
23、g對話框:用戶選擇一個要將文件另存為的文件對話框:用戶選擇一個要將文件另存為的文件名。名。PrintDialog對話框:用戶選擇和配置打印機(jī)并打印文檔。對話框:用戶選擇和配置打印機(jī)并打印文檔。247.2 窗口和對話框窗口和對話框lWPF頁和頁面導(dǎo)航頁和頁面導(dǎo)航 1、在、在WPF窗口中承載窗口中承載Page 用用C#代碼將代碼將WPF窗口的窗口的Content屬性設(shè)置為頁的實例來承載屬性設(shè)置為頁的實例來承載WPF頁頁,即將,即將Window作為頁的宿主窗口作為頁的宿主窗口。例如例如:Window w = new Window();Window w = new Window();Page1 p =
24、 new Page1();Page1 p = new Page1();w.Contentw.Content = p; = p;w.Showw.Show();();這種方式這種方式只能用只能用C#代碼代碼實現(xiàn),而且承載的頁沒有導(dǎo)航功能,實現(xiàn),而且承載的頁沒有導(dǎo)航功能,頁中的超鏈接也不會起作用,因此頁中的超鏈接也不會起作用,因此在實際應(yīng)用中很少在實際應(yīng)用中很少這樣用。這樣用。257.2 窗口和對話框窗口和對話框lWPF頁和頁面導(dǎo)航頁和頁面導(dǎo)航 2、在、在NavigationWindow中承載中承載Page 用用C#代碼將代碼將NavigationWindow窗口的窗口的Content屬性設(shè)置為頁的
25、實例來屬性設(shè)置為頁的實例來承載承載WPF頁,即將頁,即將NavigationWindow作為頁的宿主窗口。作為頁的宿主窗口。 例如:例如:Window w = new Window w = new System.Windows.Navigation.NavigationWindow();System.Windows.Navigation.NavigationWindow();w.Content = new PageExamples.Page1();w.Content = new PageExamples.Page1();w.Show();w.Show();采用這種方式時,可以在頁中設(shè)置導(dǎo)航窗口
26、(采用這種方式時,可以在頁中設(shè)置導(dǎo)航窗口(NavigationWindow)的標(biāo))的標(biāo)題以及窗口大小。也可以在題以及窗口大小。也可以在C#代碼中使用代碼中使用NavigationService類類提供的靜提供的靜態(tài)方法實現(xiàn)導(dǎo)航功能。態(tài)方法實現(xiàn)導(dǎo)航功能。267.2 窗口和對話框窗口和對話框lWPF頁和頁面導(dǎo)航頁和頁面導(dǎo)航 2、在、在NavigationWindow中承載中承載Page Page的常用屬性如下。的常用屬性如下。uWindowTitleWindowTitle:設(shè)置導(dǎo)航窗口的標(biāo)題。:設(shè)置導(dǎo)航窗口的標(biāo)題。uWindowWidthWindowWidth和和WindowHeightWindo
27、wHeight:設(shè)置導(dǎo)航窗口的寬度和高度。:設(shè)置導(dǎo)航窗口的寬度和高度。uShowsNavigationUIShowsNavigationUI:falsefalse表示不顯示導(dǎo)航條,表示不顯示導(dǎo)航條,truetrue表示顯示導(dǎo)表示顯示導(dǎo)航條。航條。uNavigationServiceNavigationService屬性:獲取該頁的宿主窗口中管理導(dǎo)航服務(wù)屬性:獲取該頁的宿主窗口中管理導(dǎo)航服務(wù)的對象,利用該對象可實現(xiàn)前進(jìn)、后退、清除導(dǎo)航記錄等操作。的對象,利用該對象可實現(xiàn)前進(jìn)、后退、清除導(dǎo)航記錄等操作。使用舉例:使用舉例:uReportPage expenseReportPage = new Re
28、portPage (); ReportPage expenseReportPage = new ReportPage (); this.NavigationService.Navigate(expenseReportPage);this.NavigationService.Navigate(expenseReportPage);277.2 窗口和對話框窗口和對話框lWPF頁和頁面導(dǎo)航頁和頁面導(dǎo)航 3、在、在Frame中承載中承載Page在在Frame元素中將元素中將Source屬性設(shè)置為導(dǎo)航到的頁屬性設(shè)置為導(dǎo)航到的頁 ,在這種方式下,既,在這種方式下,既可以用可以用XAML加載頁并實現(xiàn)導(dǎo)航,也
29、可以用加載頁并實現(xiàn)導(dǎo)航,也可以用C#代碼來實現(xiàn)。代碼來實現(xiàn)。 例如:例如:XAMLXAML:Frame Name=frame1 Source=Page1.xaml Background=#FFF9F4D4 /C#C#:frame1.Source = new Uri(Page1.xaml, frame1.Source = new Uri(Page1.xaml, UriKind.RelativeUriKind.Relative););287.3 顏色和形狀顏色和形狀WPF在在System.Windows.dll中的中的System.Windows.Media命名空間下,分命名空間下,分別提供了別提
30、供了Brushes類、類、Colors類和類和Color結(jié)構(gòu),這幾種形式都可以用來表示結(jié)構(gòu),這幾種形式都可以用來表示顏色。顏色。 Brushs類和類和Colors類類 在在System.Windows.dll中的中的System.Windows.Media命名空間下的命名空間下的Brushes類和類和Colors類都利用靜態(tài)屬性提供了預(yù)定義的顏色,這些顏色在類都利用靜態(tài)屬性提供了預(yù)定義的顏色,這些顏色在各種應(yīng)用程序中都可以使用。如設(shè)置控件的前景色、背景色、邊框色等。各種應(yīng)用程序中都可以使用。如設(shè)置控件的前景色、背景色、邊框色等。BrushesBrushes類的類的C#C#語法為語法為publi
31、c sealed class Brushespublic sealed class BrushesColorsColors類的類的C#C#語法為語法為public sealed class Colors public sealed class Colors 297.3 顏色和形狀顏色和形狀 Color結(jié)構(gòu)結(jié)構(gòu) WPF 在在System.Windows.Media命名空間下提供了一個命名空間下提供了一個Color結(jié)構(gòu),該結(jié)構(gòu),該結(jié)構(gòu)通過結(jié)構(gòu)通過A(透明度)、(透明度)、R(紅色通道)、(紅色通道)、G(綠色通道)和(綠色通道)和B(藍(lán)色通道(藍(lán)色通道)的組合來創(chuàng)建各種自定義的顏色。的組合來創(chuàng)建各
32、種自定義的顏色。一般形式為一般形式為“#rrggbb”或者或者“#aarrggbb”,其中,其中#表示十六進(jìn)制,表示十六進(jìn)制,aa表表示透明度,示透明度,rr表示紅色通道,表示紅色通道,gg表示綠色通道,表示綠色通道,bb表示藍(lán)色通道。表示藍(lán)色通道。常用方法:常用方法: Color.FromArgb(int red,int green,int blue);307.3 顏色和形狀顏色和形狀 形狀(形狀(Shape)是具有界面交互功能的幾何圖形的封裝形式。)是具有界面交互功能的幾何圖形的封裝形式。System.Windows.Shapes命名空間定義了呈現(xiàn)命名空間定義了呈現(xiàn)2D幾何圖形對象的類,這
33、幾何圖形對象的類,這些類都繼承自同一個些類都繼承自同一個Shape類類 。l形狀控件共有的屬性形狀控件共有的屬性 形狀控件共有的屬性都是在形狀控件共有的屬性都是在Shape類中定義的。由于所有形狀都是從類中定義的。由于所有形狀都是從Shape類繼承的,所以形狀控件都可以使用這些屬性類繼承的,所以形狀控件都可以使用這些屬性 。屬 性說 明Stroke獲取或設(shè)置指定形狀輪廓繪制方式的BrushStrokeThickness獲取或設(shè)置指定形狀輪廓的寬度Fill獲取或設(shè)置指定形狀內(nèi)部填充方式的BrushStretch用枚舉值說明如何填充形狀的內(nèi)部??蛇x的枚舉值有:None:不拉伸。內(nèi)容保持原始大小Fi
34、ll(默認(rèn)值):調(diào)整內(nèi)容的大小以填充目標(biāo)尺寸,不保留縱橫比Uniform:在保留內(nèi)容原有縱橫比的同時調(diào)整內(nèi)容的大小至目標(biāo)尺寸UniformToFill:在保留內(nèi)容原有縱橫比的同時調(diào)整內(nèi)容的大小,并填充至目標(biāo)尺寸。如果目標(biāo)矩形的縱橫比不同于源矩形的縱橫比,則對源內(nèi)容進(jìn)行剪裁以適合目標(biāo)尺寸317.3 顏色和形狀顏色和形狀l矩形(矩形(Rectangle) 形狀控件共有的屬性都是在形狀控件共有的屬性都是在Shape類中定義的。由于所有形狀都是從類中定義的。由于所有形狀都是從Shape類繼類繼承的,所以形狀控件都可以使用這些屬性承的,所以形狀控件都可以使用這些屬性 。Rectangle類用于繪制矩形。
35、例如:類用于繪制矩形。例如: Rectangle Width=100 Height=100 Fill=Blue Stroke=Red Canvas.Top=20 Canvas.Left=20 StrokeThickness=3 /【例例7-6】演示矩形控件的基本用法。演示矩形控件的基本用法。 327.3 顏色和形狀顏色和形狀l橢圓(橢圓(Ellipse) Ellipse類用于繪制橢圓,當(dāng)類用于繪制橢圓,當(dāng)Width和和Height相等時,繪制的實際上相等時,繪制的實際上是一個圓。例如:是一個圓。例如: Ellipse Height=75 Width=75 Fill=#FFFFFF00 Stro
36、keThickness=5 Stroke=#FF0000FF/這段這段XAML代碼在設(shè)計界面中看到的效果如下圖所示。代碼在設(shè)計界面中看到的效果如下圖所示。 2021年11月20日星期六337.3 顏色和形狀顏色和形狀l其他基本形狀其他基本形狀(可以自學(xué))(可以自學(xué)) Line(直線)(直線)Line X1=10 Y1=10 X2=50 Y2=50 Stroke=Black StrokeThickness=4 / PolyLine(多條依次相連的直線)(多條依次相連的直線)PolyLine用于用于定義多個點(diǎn),然后將這些點(diǎn)依次用直線相用于用于定義多個點(diǎn),然后將這些點(diǎn)依次用直線相連,從而構(gòu)成各種折線
37、形狀。例如:連,從而構(gòu)成各種折線形狀。例如: Polyline Points=50,25 0,100 100,100 50,25 Canvas.Left=75 Canvas.Top=50 / 2021年11月20日星期六347.3 顏色和形狀顏色和形狀l Polygon(多邊形)(多邊形)該控件和該控件和PolyLine用法相似,但它會自動將最后用法相似,但它會自動將最后1個點(diǎn)和個點(diǎn)和第第1個點(diǎn)連起來。例如:個點(diǎn)連起來。例如: Polygon Points=300,200 400,125 400,275 =2 Opacity=0.4/ / 357.4 畫筆(畫筆(Brush) 在在WPF應(yīng)用程
38、序中,畫筆(應(yīng)用程序中,畫筆(Brush)是所有控件都具有的基本功能。最常)是所有控件都具有的基本功能。最常見的是利用畫筆設(shè)置控件的前景色、背景色,填充漸變色、圖像和圖案。見的是利用畫筆設(shè)置控件的前景色、背景色,填充漸變色、圖像和圖案。l畫筆分類畫筆分類 畫筆的所有類型都在畫筆的所有類型都在System.Windows.Media命名空間下,命名空間下,Brush類是各類是各種畫筆的抽象基類,其他畫筆類型都是從該類繼承。種畫筆的抽象基類,其他畫筆類型都是從該類繼承。畫筆分類說 明純色畫筆同SolidColorBrush實現(xiàn),通過Color屬性設(shè)置畫筆顏色漸變畫筆包括:LinearGradien
39、tBrush:線性漸變畫筆。填充的區(qū)域從一種顏色逐漸過渡到另一種顏色RadialGradientBrush:徑向漸變畫筆,也叫仿射漸變畫筆。填充的區(qū)域顏色以橢圓為邊界,從原點(diǎn)開始由內(nèi)向外逐步擴(kuò)散平鋪畫筆基類為TitleBrush,擴(kuò)充類包括:ImageBrush:圖像畫筆。用圖像填充一個區(qū)域DrawingBrush:使用GeometryDrawing、ImageDrawing或VideoDrawing填充一個區(qū)域VisualBrush:使用DrawingVisual、Viewport3DVisual或ContainerVisual填充一個區(qū)域VideoBrush:用視頻填充一個區(qū)域畫筆資源將畫
40、筆作為XAML資源來處理367.4 畫筆(畫筆(Brush) l利用利用WPF設(shè)計器和屬性窗口設(shè)置畫筆類型設(shè)計器和屬性窗口設(shè)置畫筆類型 在在XAML或者文檔大綱中選中某個控件后,可直接利用或者文檔大綱中選中某個控件后,可直接利用【屬性屬性】窗口設(shè)置窗口設(shè)置畫筆類型。畫筆類型。 純色畫筆 漸變畫筆 平鋪畫筆 377.4 畫筆(畫筆(Brush) l純色畫筆(純色畫筆(SolidColorBrush) 創(chuàng)建創(chuàng)建SolidColorBrush實例后,可通過實例后,可通過Color類提供的方法設(shè)置類提供的方法設(shè)置Color屬屬性。例如性。例如SolidColorBrush scb = new Soli
41、dColorBrush();SolidColorBrush scb = new SolidColorBrush();scb.Color = Color.FromArgb(0 xFF, 0 xFF, 0 x0, 0 x0);scb.Color = Color.FromArgb(0 xFF, 0 xFF, 0 x0, 0 x0);button1.Background = scb; button1.Background = scb; l線性漸變畫筆(線性漸變畫筆(LinearGradientBrush) LinearGradientBrush使用沿一條直線(即漸變軸)定義的漸變繪制區(qū)域。使用沿一條直
42、線(即漸變軸)定義的漸變繪制區(qū)域。可以使用可以使用GradientStop對象指定漸變的顏色及其在漸變軸上的位置,還可對象指定漸變的顏色及其在漸變軸上的位置,還可以修改漸變軸創(chuàng)建水平和垂直漸變并反轉(zhuǎn)漸變方向。如果不指定漸變方向,以修改漸變軸創(chuàng)建水平和垂直漸變并反轉(zhuǎn)漸變方向。如果不指定漸變方向,LinearGradientBrush默認(rèn)創(chuàng)建對角線漸變。默認(rèn)創(chuàng)建對角線漸變。 387.4 畫筆(畫筆(Brush) l線性漸變畫筆(線性漸變畫筆(LinearGradientBrush) !- - 397.4 畫筆(畫筆(Brush) l線性漸變畫筆(線性漸變畫筆(LinearGradientBrush
43、) 通過修改畫筆的通過修改畫筆的StartPoint和和EndPoint創(chuàng)建水平和垂直漸變效果創(chuàng)建水平和垂直漸變效果 407.4 畫筆(畫筆(Brush) l徑向漸變畫筆(徑向漸變畫筆(RadialGradientBrush) 以一個橢圓為邊界,從中心點(diǎn)開始由內(nèi)向外逐漸填充漸變的顏色。以一個橢圓為邊界,從中心點(diǎn)開始由內(nèi)向外逐漸填充漸變的顏色。畫筆由原點(diǎn)(畫筆由原點(diǎn)(GradientOrigin)和輻射到的范圍()和輻射到的范圍(Center、RadiusX、RadiusY)來定義。漸變從原點(diǎn)(來定義。漸變從原點(diǎn)(GradientOrigin)開始由強(qiáng)到弱逐漸向外圍輻射,中心點(diǎn)和)開始由強(qiáng)到弱逐
44、漸向外圍輻射,中心點(diǎn)和半徑(半徑(Center、RadiusX、RadiusY)指定輻射到的橢圓范圍,)指定輻射到的橢圓范圍,Center屬性指定屬性指定橢圓的圓心。漸變軸上的漸變停止點(diǎn)指定輻射的顏色和偏移量。例如:橢圓的圓心。漸變軸上的漸變停止點(diǎn)指定輻射的顏色和偏移量。例如: RadialGradientBrush GradientOrigin=0.5,0.5 Center=0.5,0.5 RadiusX=0.5 RadiusY=0.5 417.4 畫筆(畫筆(Brush) l利用利用WPF設(shè)計器實現(xiàn)畫筆變換設(shè)計器實現(xiàn)畫筆變換 在在WPF設(shè)計器中,可直接用鼠標(biāo)對各種控件進(jìn)行平移(設(shè)計器中,可
45、直接用鼠標(biāo)對各種控件進(jìn)行平移(Translate)、旋轉(zhuǎn))、旋轉(zhuǎn)(Rotate)、縮放()、縮放(Scale)、扭曲()、扭曲(Skew)、反轉(zhuǎn)()、反轉(zhuǎn)(Flip)等變換)等變換 427.5 屬性屬性 l依賴項屬性和附加屬性依賴項屬性和附加屬性 屬性(屬性(Property)是類對外公開的字段,用)是類對外公開的字段,用get和和set訪問器實現(xiàn)。簡訪問器實現(xiàn)。簡稱稱CLR屬性。屬性。l依賴項屬性依賴項屬性 為了用為了用XAML描述動態(tài)變化的屬性值以及用描述動態(tài)變化的屬性值以及用XAML實現(xiàn)數(shù)據(jù)綁定,每實現(xiàn)數(shù)據(jù)綁定,每個控件又用個控件又用DependencyProperty類對類對CLR屬性
46、做了進(jìn)一步的封裝和擴(kuò)屬性做了進(jìn)一步的封裝和擴(kuò)展展,這些與,這些與CLR屬性對應(yīng)的封裝和擴(kuò)展后的屬性稱為屬性對應(yīng)的封裝和擴(kuò)展后的屬性稱為依賴項屬性依賴項屬性。主要用于樣式、主題、數(shù)據(jù)綁定、動畫、元數(shù)據(jù)重寫、屬性值繼承以主要用于樣式、主題、數(shù)據(jù)綁定、動畫、元數(shù)據(jù)重寫、屬性值繼承以及及WPF設(shè)計器集成等情況設(shè)計器集成等情況 。 437.5 屬性屬性 l依賴項屬性依賴項屬性 控件的每個控件的每個CLR屬性都有與其對應(yīng)的依賴項屬性屬性都有與其對應(yīng)的依賴項屬性,反之亦然。,反之亦然。在在XAML以及以及【屬性屬性】窗口窗口中,都是用中,都是用依賴項屬性依賴項屬性來描述控件來描述控件的某個屬性,此時的某個屬
47、性,此時WPF會自動維護(hù)與該依賴項屬性對應(yīng)的會自動維護(hù)與該依賴項屬性對應(yīng)的CLR屬性。屬性。在在C#代碼中,開發(fā)人員絕大部分情況下都是使用代碼中,開發(fā)人員絕大部分情況下都是使用CLR屬性獲取屬性獲取或修改控件的某個屬性值,此時系統(tǒng)會自動處理與該或修改控件的某個屬性值,此時系統(tǒng)會自動處理與該CLR屬性屬性對應(yīng)的依賴項屬性。只有在實現(xiàn)動畫等特殊功能時,才需要設(shè)對應(yīng)的依賴項屬性。只有在實現(xiàn)動畫等特殊功能時,才需要設(shè)置系統(tǒng)無法判斷該如何處理的依賴項屬性的相關(guān)信息。置系統(tǒng)無法判斷該如何處理的依賴項屬性的相關(guān)信息。 447.5 屬性屬性 l依賴項屬性和附加屬性依賴項屬性和附加屬性 附加屬性附加屬性 可以在
48、某個子元素上指定其父元素的屬性,以這種方式聲明的屬性稱為附可以在某個子元素上指定其父元素的屬性,以這種方式聲明的屬性稱為附加屬性。加屬性。定義附加屬性的一般形式為定義附加屬性的一般形式為 : 父元素類型名父元素類型名.屬性名屬性名例如:例如: CheckBox Hello=TopHello Rectangle Width=100 Height=100 Fill=Blue Stroke=Red =20 StrokeThickness=3 / 457.6 事件事件 lWPF事件模型事件模型 事件是指由系統(tǒng)事先設(shè)定的、能被控件識別和響應(yīng)的動作,如單擊鼠標(biāo)、事件是指由系統(tǒng)事先設(shè)定的、能被控件識別和響應(yīng)
49、的動作,如單擊鼠標(biāo)、按下某個鍵等。按下某個鍵等。l在在XAML中注冊事件中注冊事件 在在XAML中,聲明事件的一般形式為中,聲明事件的一般形式為事件名事件名=事件處理程序名事件處理程序名 或者:或者:子元素類型名子元素類型名. .事件名事件名=事件處理程序名事件處理程序名 既可以通過事件列表附加事件。例如:既可以通過事件列表附加事件。例如:Button Name=Button1 =Button1_MouseDoubleClick_1/也可以在也可以在XAML中直接鍵入事件名稱。中直接鍵入事件名稱。 467.6 事件事件 l在在C#代碼中注冊事件代碼中注冊事件 利用利用+=注冊事件,利用注冊事件
50、,利用-=取消注冊取消注冊 ,例如:,例如:public MainWindow()public MainWindow() InitializeComponent(); InitializeComponent(); Button1.MouseDoubleClick += Button1_MouseDoubleClick; Button1.MouseDoubleClick += Button1_MouseDoubleClick; void Button1_MouseDoubleClick(object sender, void Button1_MouseDoubleClick(object sen
51、der, MouseButtonEventArgs e)MouseButtonEventArgs e) / /事件處理代碼事件處理代碼 477.6 事件事件 lWPF事件模型事件模型 事件處理程序中的參數(shù)事件處理程序中的參數(shù) 所有所有WPF事件處理程序默認(rèn)都提供兩個參數(shù)。例如:事件處理程序默認(rèn)都提供兩個參數(shù)。例如:private void OkButton_Click_1(object sender, private void OkButton_Click_1(object sender, RoutedEventArgsRoutedEventArgs e) e) 參數(shù)參數(shù)sender報告附加該
52、事件的對象,參數(shù)報告附加該事件的對象,參數(shù)e是數(shù)據(jù)源的相關(guān)數(shù)據(jù)。是數(shù)據(jù)源的相關(guān)數(shù)據(jù)。 在在WPF應(yīng)用程序中,絕大部分情況下都是用應(yīng)用程序中,絕大部分情況下都是用e.Source來判斷事件源是誰來判斷事件源是誰。另外,如果是判斷圖形圖像中重疊的部分,則應(yīng)該用。另外,如果是判斷圖形圖像中重疊的部分,則應(yīng)該用e.OriginalSource靠命中測試來判斷。靠命中測試來判斷。事件使用要點(diǎn)事件使用要點(diǎn) (1)大部分情況下通過)大部分情況下通過【屬性屬性】窗口直接設(shè)置某元素的事件窗口直接設(shè)置某元素的事件 (2)如果具有相同類型的元素很多,而且這些元素都會引發(fā)某個相同的)如果具有相同類型的元素很多,而且這些元素都會引發(fā)某個相同的事件,此時可以在其父元素中聲明附加事件,這種辦法可以簡化事件聲明事件,此時可以在其父元素中聲明附加事件,這種辦法可以簡化事件聲明的次數(shù)。的次數(shù)。 487.6 事件事件 l事件路由策略事件路由策略 :WPF中的事件路由使用直接、冒泡和隧道三種方式。中的事件路由使用直接、冒泡和隧道三種方式。 直接路由直接路由直接(直接(Direct)是指該事件只針對元素自身,而不會再
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年消防工程維保及消防安全教育培訓(xùn)合同2篇
- 二零二五版美發(fā)沙龍與發(fā)型師勞動合同范本(含職業(yè)規(guī)劃)3篇
- 2025年度特種車輛租賃及操作培訓(xùn)服務(wù)合同3篇
- 二零二四南通國際會展中心場地租賃及配套設(shè)施合同3篇
- 二零二五版電商數(shù)據(jù)分析與優(yōu)化代運(yùn)營合同3篇
- 年度客運(yùn)用車市場分析及競爭策略分析報告
- 2024-2025學(xué)年高中歷史第二單元中國古代文藝長廊第7課漢字與書法課時作業(yè)含解析岳麓版必修3
- 2024-2025學(xué)年高中歷史第6單元辛亥革命與中華民國的建立第20課北洋軍閥統(tǒng)治時期的政治經(jīng)濟(jì)與文化經(jīng)典題集錦含解析新人教版必修中外歷史綱要上
- 2024音樂人授權(quán)影視作品使用其音樂合同
- 二零二四年度4S店租賃期內(nèi)合同解除與違約金協(xié)議
- 氣管切開患者氣道濕化的護(hù)理進(jìn)展資料 氣管切開患者氣道濕化
- 管理模板:某跨境電商企業(yè)組織結(jié)構(gòu)及部門職責(zé)
- 底架總組裝工藝指導(dǎo)書
- 簡單臨時工勞動合同模板(3篇)
- 聚酯合成反應(yīng)動力學(xué)
- 自動控制原理全套課件
- 上海科技大學(xué),面試
- 《五年級奧數(shù)總復(fù)習(xí)》精編課件
- TS2011-16 帶式輸送機(jī)封閉棧橋圖集
- 礦區(qū)道路工程施工組織設(shè)計方案
- 多聯(lián)機(jī)的施工方案與技術(shù)措施
評論
0/150
提交評論