版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
27WPFWPFWindowsPresentationFoundation的縮寫,它是微軟公司發(fā)布的下一代顯示系統(tǒng)框架,通過其強大的展現(xiàn)功能,使得用戶體驗更加豐富?;赪PF框架,開發(fā)人員可WPF引擎。由于該框架內(nèi)置了很多功能強大的應用程序開發(fā)組件,使WPF在利用現(xiàn)代圖形硬高效的硬件和軟件呈現(xiàn)。WPF的基礎架構(gòu)如圖27.1Milcore屬于非托管組件,之所DirectX的緊的,可實現(xiàn)高效的硬件和軟件呈現(xiàn)。WPF還要求對內(nèi)存和執(zhí)行進行精確控制,Milcore中的組合引擎受
27.1WPF創(chuàng)建一個顯示內(nèi)容,然后綁定到某些數(shù)據(jù)。在WPF中,關(guān)于控件的所有內(nèi)容、顯示內(nèi)容2727章WPFXAML語言:XAML語言是一種基于XML的標記語言,用于以的方式實現(xiàn)控件:WPFWPF類。WPF布局:WPF窗口程序或者網(wǎng)頁程序通過控件組成之后,需要通過一定的排列方式來顯示出頁面的層次或者區(qū)域特性,這個特性需要布局的功能來實現(xiàn)。實際上,數(shù)據(jù)綁定完成了窗口控件與數(shù)據(jù)源之間的數(shù)據(jù)交互的過程。WPF可以通過ADO.NET等相關(guān)技術(shù),實現(xiàn)對數(shù)據(jù)的,將獲取的數(shù)據(jù)綁定到對應的數(shù)據(jù)控件輸入:由用戶完成的輸入,然后通過控件檢測之后發(fā)出響應。WPF輸入系統(tǒng)命令:應用程序通常具有復雜的輸入要求。WPF提供了一個命令系統(tǒng),它將用戶圖形:WPF在處理圖形功能上,可謂是其強項所在,它引進了一組廣泛的、靈活動畫:WPF動畫支持可以使控件變大、旋轉(zhuǎn)、調(diào)節(jié)和淡化,以產(chǎn)生有趣的頁面過渡和效果??梢詫Υ蠖鄶?shù)WPF類或者是自定義類進行動畫處理。:的應用包括圖像、和音頻。WPF對于這些的應用提供了特殊文檔。WPF還提供了用于創(chuàng)建、查看、管理、批注、打包和打印文檔的服務。自定義應用程序:WPF提供了強大的自定義功能,通過該功能,開發(fā)人員可以創(chuàng)內(nèi)容模型、控件模板、數(shù)據(jù)模板、樣式、資源、和資源、自定義控件等。WPFVisualStudio2008WPF應用程序的相關(guān)編程WPFVisualStudio2008中的項目創(chuàng)建來實現(xiàn),VisualStudio20084WPF類型的項目,分別是:WPF應用程序、WPF瀏覽器應用程序、WPF用戶控件庫和WPF自定義控件庫。WPFWPFVisualStudio2008中WPF的開發(fā)界面組成。 27.2VisualStudio2008單擊菜單欄中的“文件”|“新建”|“項目”菜單,彈出“新建項目”的框,如27.3所示。圖27.3VisualStudio2008新建項目在“新建項目”框中,左側(cè)的“項目類型”區(qū)域列出了VisualStudio2008可以創(chuàng)WPFWindows,右側(cè)“模板”區(qū)域選擇“WPF說明:若要創(chuàng)建WPF瀏覽器應用程序,需要在“模板”區(qū)域選擇“WPF瀏覽器應用VisualStudio2008中,通過“解決方案資源管理器”查看該項目的文件結(jié)構(gòu),如圖27.4所示。27.4VisualStudio200827.4Window1.xaml27.5“設計”視圖和“XAML“設計”視圖,用于可視化的界面設計,開發(fā)人員可以直接通過拖曳“工具箱”中的控件到“設計”視圖中,完成控件的添加。“XAML”視圖用來顯示對應設計視圖界面的XAMLXAML視圖中將自動添加該控件對應的XAML代碼。圖27.6所示。單擊圖27.4中的Window1.xaml.cs文件節(jié)點,彈出Window1對應的代碼編寫窗口,如圖27.7所示。技巧:cs文件打開代碼編輯窗口之外,27.6XAML27.7WPFWindows應用程序,其是用于構(gòu)件客戶端/服務器應用VisualStudio2008WPF應WPF27.2.1節(jié)中的步驟(1),WPF應用程序,將“名稱”設置為oWorldWindowsApp,如圖27.8所示。27.8WPF添加控件。在“解決方案資源管理器”窗口中,雙擊Window1.xaml<WindowoWorldWindowsApp.Window1"<!--定義Window ""單擊,名稱為button_Click。添加處理代碼。雙擊Window1.xaml.cs文件,打開該文件的代碼編輯窗口。在Windows1類中添加如下代碼。publicpartialclassWindow1:{public{}privatevoidbutton_Click(objectsender,RoutedEventArgs{ oWorld}}方法button_Click為 oWorld!”文本。運行該項目。單擊菜單欄“調(diào)試”|“啟動調(diào)試”菜單,VisualStudio2008開始編譯該項目,同時彈出運行結(jié)果。單擊【點擊】按鈕之后,運行結(jié)果如圖27.9所示。27.9WPFVisualStudio2008創(chuàng)建完整的WPF瀏覽器應用程序。創(chuàng)建WPF瀏覽器應用程序項目。參照27.2.1節(jié)中的步驟(1),創(chuàng)建WPF瀏覽 oWorldPagesApp,如圖27.10所示。27.10WPF<Page xmlns命名空間-->WPF在處理基本應用程序和瀏覽器應在Page1類中添加如下代碼。publicpartialclassPage1:{public{}privatevoidbutton_Click(objectsender,RoutedEventArgs{ oWorld}}button_Click為響應代碼,表示該按鈕被單擊之后的代碼處理邏輯,方法內(nèi)部代碼表示單擊該按鈕之后,彈出一個消息框,顯示“oWorldWPF瀏覽器應用程序的實現(xiàn)類繼承于Page類。運行該項目。單擊菜單欄“調(diào)試”|“啟動調(diào)試”菜單,VisualStudio2008開始編譯該項目,同時彈出運行結(jié)果。單擊“點擊”按鈕之后,運行結(jié)果如圖27.11所示。27.11WPFWPF是實現(xiàn)系統(tǒng)頁面展現(xiàn)的框架,所以WPF的展現(xiàn)系統(tǒng)中,控件起著重要的作用,可以說眾多絢麗的WPF頁面效果都是由基本的WPF控件結(jié)合其他技術(shù)實現(xiàn)的。面的紹ListBox選擇控件,以及簡單介紹實現(xiàn)控件的XAML語言。xmlns命名空間-->Title="ListBox測試Height="286Width="294"><!--定義窗體的標題,WindowWPF應用程序的窗口定義文件,X:Class屬性表示該XAML文件對應的類的名稱,此實例的代碼文件名空間為ListBoxSample,類名稱為Window1。Xmlns屬性表示該XMAL文件定義名空間,默認都是標準的/winfx/2006/xaml/presentation,Title屬性表示該窗口的名稱,Height和Width屬性分別表示該窗口的高度和寬度。XMALCanvas布局控件,布局控<SetterProperty="SelectionMode"<Setter<SetterProperty="Background"<Stylex:Key="SimpleListBoxItem"TargetType="{x:Type<SetterProperty="FontSize"<SetterProperty="Background"<SetterProperty="Foreground" <TriggerProperty="ListBoxItem.IsMouseOver"Value=<SetterProperty="Foreground"<SetterProperty="Background"CanvasCanvas.Resources,然后通過樣式Style節(jié)點進行描述。3個樣式對應的鍵值名稱分別為Simple,SimpleList-BoxItemTriggers3TargetType卻不一樣,Simple對應ListBoxSimpleListBoxItemTriggersListBoxItem的樣式,關(guān)鍵字x:Type表示針對的對象類型,x則表示前面已經(jīng)定義過的xmlns:x="/winfx/2006/xaml命名空間。在Style中定義該指定控靜態(tài)屬性之外,還可以定義樣式的觸發(fā)器屬性,如Triggers屬性的<Style.Triggers>節(jié)點,激活,激活的效果是前景色為Red,背景色為LightBlue。<GridName="grid"ShowGridLines="false"Background="White"<DockPanelMargin="10,10,3,3"Grid.Column="0"<ListBoxStyle="{StaticResourceSimple}"Width="100"Height="55"><DockPanelMargin="10,10,3,3"Grid.Column="0"選項選項選項選項選項選項選項選項選項選項<DockPanelMargin="10,10,3,3"Grid.Column="0"<ListBoxItemStyle="{StaticResourceTriggers}">選項<ListBoxItemStyle="{StaticResourceTriggers}">選項<ListBoxItemStyle="{StaticResourceTriggers}">選項<ListBoxItemStyle="{StaticResourceTriggers}"><ListBoxItemStyle="{StaticResourceTriggers}">選項<ListBoxItemStyle="{StaticResourceTriggers}">選項<ListBoxItemStyle="{StaticResourceTriggers}">選項<ListBoxItemStyle="{StaticResourceTriggers}">選項Grid51DockPanelGrid控件中已經(jīng)劃分好后通過Style="{StaticResource**}"語法,對各個控件的樣式進行指定。27.12ListBox使用Hyperlink<StackPanel<TextBlockHorizontalAlignment="Left" <HyperlinkNavigateUri="Page2.xaml">下一頁在頁面中添加了一個Hyperlink控件,該控件的NavigateUri屬性設置為 PagePage2.xamlXAML視圖編輯中添加如下<StackPanel<StackPanel<TextBlockDockPanel.Dock="Top"<TextBlockHorizontalAlignment="Left" <HyperlinkNavigateUri="Page1.xaml">跳轉(zhuǎn)到起始頁該頁面中也同樣設置了一個Hyperlink控件,該控件的 目標頁面為Page1.xaml, 圖27.13Hyperlink控件的首 圖27.14Hyperlink控件的頁面切使用DockPanel與說明如表27.1所示。27.1 DockPanel控件用于沿布局容器的邊緣定位子內(nèi)容。開發(fā)用戶界面時,如果想將某個控件DockPanel容器<DockPanel<TextBlockBackground="LightBlue"<TextBlockDockPanel.Dock="Bottom"<TextBlockDockPanel.Dock="Left"<DockPanel<StackPanel 從以上代碼可以看出,DockPanel將該頁面分為4個部分,分別是DockPanel.Dock="Top"的標題欄、DockPanel.Dock="Left"的菜單欄、子區(qū)域的內(nèi)容欄和DockPanel.Dock="Bottom"的狀態(tài)欄。4部分分別用不同顏色加以區(qū)別,27.15DockPanel使用StackPanelStackPanel控件是另外一種常用的布局控件。StackPane要么垂直疊放包含的控件,要么將包含的控件排列在水平行中,具體情況取決于Orientation屬性的值。如果將比StackPanelStackPanel中,這些控件將被截掉且<BorderBackground="SkyBlue"BorderBrush="Black"<BorderWidth="400"Background="CadetBlue"BorderBrush="Black"<BorderBackground="#ffff99"BorderBrush="Black"<BorderWidth="200"Background="PaleGreen"BorderBrush="Black"<BorderBackground="White"BorderBrush="Black"27.16StackPanelXML數(shù)據(jù)等。本節(jié)通過一個實例介<WindowBackground="Cornsilk"<!--Window窗體的背景色xmlns命名空間-->><c:Source1<Source2 <TextBlockText="{BindingPath=Name}" te<TextBlockText="{BindingXPath=@Name}" 代碼中定義了兩個數(shù)據(jù)源,它們的鍵值分別為Source1Data和Source2Data,其中Source1Data數(shù)據(jù)源為對象數(shù)據(jù)源,它對應了代碼中的Source1類實例。Source2Data添加數(shù)據(jù)模板定義。接下來通過DataTemte定義了綁定數(shù)據(jù)控件的數(shù)據(jù)模板,<!--添加TextBlock控件,字大小為18,字重量為Bold,邊距10,居中對齊,內(nèi)部文本為多數(shù)<TextBlockFontSize="18FontWeight="BoldMargin="10"<ListBoxName="myListBox"Height="300"Width="200"<!--publicclass{privatestring_name;publicpublicclass{privatestring_name;publicstring{ {return}{_name=}}publicSource1Item(string{Name=}}publicclassSource1:{public{}}于前臺進行數(shù)據(jù)源綁定的對象說明類。Source1類繼承了ObservableCollection類。ObservableCollection類表示一個動態(tài)數(shù)據(jù)集合,在添加項、移除項或刷新整個列表時,此集合將提供通知。Add方法表示向該Source1集合中添加數(shù)據(jù)對象。27.17 義xmlns命名空間--> "Height="300"Width="383"><!--定義窗體的標題,高度和<DockPanelBackground="Cornsilk"HorizontalAlignment="Left"Width="350"Height="150" te <CanvasWidth="300"<!--添加TextBlock控件,指定字體大小10,前景 lue,寬度180,畫布<TextBlockFontSize="10"Foreground="Blue"Width="180"Canvas.Left="0"Text="{BindingPath=StockItemName}"/><TextBlockFontSize="10"Foreground="Green"Text="$"<TextBlockFontSize="10"Foreground="Green"Width="80"Canvas.Left="190"Text="{BindingPath=StockItemPrice}"/> 靠位置為上部--><TextBlockFontSize="18"Margin="5"FontWeight="Bold" <ListBoxName="MyListBox"DockPanel.Dock="Top"Width="315"Height="80"Background="HoneyDew"ItemsSource="{BindingSource={StaticResource publicclassStockpublicclassStock:{privatestring_stockitemname=privatedecimal_stockitemprice=publicStock(stringnewStockItemName,decimal{_stockitemname=_stockitemprice=}publicstring{{return}{if(_stockitemname.Equals(value)=={_stockitemname=}}}publicdecimal{{return}{if(_stockitemprice.Equals(value)=={{_stockitemprice=}}} publiceventPropertyChangedEventHandlerprivatevoidOnPropertyChanged(string{if(PropertyChanged!={}}}publicclassStockCollection:{privateStockitem1=newStock("科技",(decimal)24.95);privateStockitem2=newStock("鋼鐵",(decimal)16.05);privateStockitem3=newStock("銀行",(decimal)100.0);privatevoidTimer1_Elapsed(objectsender,System.Timers.ElapsedEventArgse){//分別設定子項的StockItemPrice屬性item1.StockItemPrice+=(decimal)1.25;item2.StockItemPrice+=(decimal)2.45;item3.StockItemPricedecimal)10.55;}privatevoid{System.Timers.TimerTimer1=newTimer1.Enabledtrue;Timer1.Interval=Timer1.Elapsed+=newSystem.Timers.ElapsedEventHandler}publicpublic:{}}在上面代碼中,首先定義了用于顯示的數(shù)據(jù)項類Stock,其實現(xiàn)了InotifyProperty-完成向客戶端發(fā)出某一屬性值已更改。為了實現(xiàn)接口,代碼中定義了委托對象PropertyChangedStockItemNameStockItemPrice屬性發(fā)生更新的時候,調(diào)用OnPropertyChanged方法來實現(xiàn)PropertyChanged委托的調(diào)用。27.18使用BrushWPF圖形處理中,需要使用畫筆將顏色或者圖形、風格添加到頁面中,這就需要Brush對象來實現(xiàn)。本節(jié)實例中將涉及到3種Brush對象,分別是SolidColorBrush、LinearGradientBrush和RadialGradientBrush。SolidColorBrush使用純色繪制區(qū)域;rushadialadientBush焦點定義漸變的開始,而圓定義漸變的終點。3種繪制方式各有不同,下面通過實例來分<StyleTargetType="{x:Type<SetterProperty="Stroke"<SetterProperty="Margin"<StyleTargetType="{x:Type<SetterProperty="Stroke"<SetterProperty="Margin"<GridMargin="10"<RowDefinitionHeight="40"<RowDefinitionHeight="10"<RowDefinitionHeight="10"SolidColorBrush<TextBlockGrid.Row="2"Grid.Column="0"<GridGrid.Row="3"Grid.Column="0"<RectangleFill="Red"Width="150"Height="150"Grid.Row="0"Grid.Column="0"Grid.RowSpan="3"/><RectangleFill="MediumBlue"Width="50"Height="50"Grid.Row="0"Grid.Column="1"/><RectangleFill="Purple"Width="50"Height="50"Grid.Row="1"Grid.Column="1"/><RectangleFill="Gold"Width="50"Height="50"Grid.Row="2"Grid.Column="1"/>色,同時指定了每個Rectangle圖形的寬度、高度以及在網(wǎng)格中的位置等屬性。LinearGradientBrushLinearGradientBrush的繪制代碼<TextBlockGrid.Row="2"<GridGrid.Row="3"Grid.Column="2"<GradientStopColor="Yellow"Offset="0.0"<GradientStopColor="Orange"Offset="0.5"<GradientStopColor="Red"Offset="1.0"<GradientStopColor="Blue"Offset="0.0"<GradientStopColor="Purple"Offset="1.0"<GradientStopColor="Purple"Offset="0.0"<GradientStopColor="White"Offset="1.0"<GradientStopColor="Gold"Offset="0.0"<GradientStopColor="Red"Offset="0.5"<GradientStopColor="Orange"Offset="1.0"</GridGrid控件結(jié)束添加RadialGradientBrush繪圖控件。下面添加RadialGradientBrush的繪制代碼<TextBlockGrid.Row="2"<GridGrid.Row="3"<GradientStopColor="Yellow"Offset="0.0"<GradientStopColor="Orange"Offset="0.5"<GradientStopColor="Red"Offset="1.0"<EllipseWidth="50"Height="50"Grid.Row="0"<GradientStopColor="White"Offset="0.0"<GradientStopColor="Black"Offset="1.0"<EllipseWidth="50"Height="50"Grid.Row="1"<GradientStopColor="Purple"Offset="0.5"<EllipseWidth="50"Height="50"Grid.Row="2"<GradientStopColor="Yellow"Offset="0.0"<GradientStopColor="Orange"Offset="0.5"<GradientStopColor="Red"Offset="1.0"</GridGrid控件結(jié)束上面代碼繪制了4個Ellipse圖形,同樣使用Fill屬性填充顏色,但由于使用的是RadialGradientBrushFillRadialGradientBrush的集合,同時指定了每個Ellipse圖形的GradientStops屬性來設置顏色的漸變。27.19Brush使用Storyboard和效果。WPF允許對大多數(shù)屬性進行動畫處理。WPFStoryboard實現(xiàn)控制圖形尺寸,形成動<RectangleWidth="200"Height="200"<LinearGradientBrushStartPoint="0,0"SpreadMethod="Pad"EndPoint="0,1"Map <GradientStopOffset="0"Color="red"<GradientStopOffset="0.5"Color="green" <GradientStop "Color="blue"XAMLRectangleLinearGradientBrush對其進<Storyboard的起止范圍,重復時間屬性,開始時間屬性--><DoubleAnimationStoryboard.TargetName="myRectangle"From="0"To="100"RepeatBehavior="0:0:50"BeginTime="0:0:0.5"/>時間--><DoubleAnimationStoryboard.TargetName="myRectangle"Storyboard.TargetProperty="(Rectangle.Height)"From="0"To="100"AutoReverse="true"RepeatBehavior="0:0:50"BeginTime="0:0:0.5"Duration="0:0:2"/>中定義了
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年醫(yī)學專家知識保護協(xié)議
- 2025年農(nóng)村廢棄民房購買合同
- 2025年分期付款購買裝修家具協(xié)議
- 2025年代理商業(yè)務保密協(xié)議
- 2025年奢侈品銷售代理合作合同
- 2025年室內(nèi)裝飾施工驗收設計協(xié)議
- 2025年度定制化母嬰護理月嫂服務合同4篇
- 高空設施安裝與拆除作業(yè)安全協(xié)議書3篇
- 2025版大學食堂冷鏈食材配送服務合同模板3篇
- 2025版土地證抵押個人借款合同示范文本3篇
- 2025屆高考英語 716個閱讀理解高頻詞清單
- 報建協(xié)議書模板
- 汽車配件購銷合同范文
- 貴州省2024年中考英語真題(含答案)
- 施工項目平移合同范本
- (高清版)JTGT 3360-01-2018 公路橋梁抗風設計規(guī)范
- 胰島素注射的護理
- 云南省普通高中學生綜合素質(zhì)評價-基本素質(zhì)評價表
- 2024年消防產(chǎn)品項目營銷策劃方案
- 聞道課件播放器
- 五星級酒店收入測算f
評論
0/150
提交評論