WPf經(jīng)典教程11鍵盤輸入,鼠標(biāo)輸入,焦點(diǎn)處理-精品資料_第1頁
WPf經(jīng)典教程11鍵盤輸入,鼠標(biāo)輸入,焦點(diǎn)處理-精品資料_第2頁
WPf經(jīng)典教程11鍵盤輸入,鼠標(biāo)輸入,焦點(diǎn)處理-精品資料_第3頁
WPf經(jīng)典教程11鍵盤輸入,鼠標(biāo)輸入,焦點(diǎn)處理-精品資料_第4頁
WPf經(jīng)典教程11鍵盤輸入,鼠標(biāo)輸入,焦點(diǎn)處理-精品資料_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

一、鍵盤類和鍵盤事件WPF提供了基礎(chǔ)的鍵盤類(System.Input.Keyboard類),該類提供與鍵盤相關(guān)的事件、方法和屬性,這些事件、方法和屬性提供有關(guān)鍵盤狀態(tài)的信息。Keyboard的事件也通過UIElement等XAML基元素類的事件向外提供。對于鍵盤操作,其常用的事件有兩組:KeyDown事件和PreviewKeyDown事件:處理鍵盤鍵按下KeyUp事件和PreviewKeyUp事件:處理鍵盤鍵抬起其中KeyDown和KeyUp事件屬于冒泡路由事件,而PreviewKeyDown和PreviewKeyup屬于隧道路由事件。為了使元素能夠接收鍵盤輸入,該元素必須可獲得焦點(diǎn)。默認(rèn)情況下,大多數(shù)UIElement派生對象都可獲得焦點(diǎn)。如果不是這樣,則要使元素可獲得焦點(diǎn),請將基元素上的Focusable屬性設(shè)置為true。像StackPanel和Canvas這樣的Panel類將Focusable的默認(rèn)值設(shè)置為false。因此,對要獲取鍵盤焦點(diǎn)的這些對象而言,必須將Focusable設(shè)置為true。例如:在筆者的Notebook中有''靜音〃、''增大音量〃、''減小音量〃這三個快捷鍵,在一個應(yīng)用程序的窗體上處理這三個鍵的點(diǎn)擊可以:<Windowx:Class="InputCommandAndFocus.Window1"xmlns="/winfx/2006/xaml/presentation"xmlns:x="/winfx/2006/xaml"4:Title="Window1"Height="300"Width="480"

4:Focusable="True"PreviewKeyDown="Window_PreviewKeyDown"><Canvas><!—...—></Canvas></Window>privatevoidWindow_PreviewKeyDown(objectsender,KeyEventArgse){if(e.Key==Key.VolumeMute)TOC\o"1-5"\h\z{//按下'、靜音〃鍵txtMessage.Text="Mute";e.Handled=true;}else if(e.Key==Key.VolumeUp){//按下''增大音量〃鍵txtMessage.Text"Up";e.Handledtrue;}elseif(e.Key==Key.VolumeDown){//按下''減小音量〃鍵txtMessage.Text"Down";e.Handledtrue;}}

二、鼠標(biāo)類和鼠標(biāo)事件WPF提供的System.Input.Mouse類提供與鼠標(biāo)相關(guān)的事件、方法和屬性,這些事件、方法和屬性提供有關(guān)鼠標(biāo)狀態(tài)的信息。與Keyboard類類似,其事件也通過UIElement等基元素向外提供。其事件主要有以下幾組(每個事件均包含XXX冒泡路由事件和PreviewXXX隧道路由事件)MouseDown、MouseUp事件:處理鼠標(biāo)鍵的按下與抬起MouseEnter、MouseLeave、MouseMove:處理鼠標(biāo)進(jìn)入、離開控件及在控件上移動MouseWheel:處理鼠標(biāo)滾輪滾動另外,對于鼠標(biāo)位置的捕獲,使用Mouse類的GetPosition方法,其參數(shù)是一個UIElement,表示其鼠標(biāo)位置基于哪一個控件的坐標(biāo)系。例如,對于一個矩形圖形,設(shè)置其鼠標(biāo)的各種事件:<RectangleCanvas.Left="246"Canvas.Top="46"Height="118"Name="mainRectangle"Stroke="Black"Width="200"Fill="White"MouseEnter="mainRectangle_MouseEnter"MouseLeave="mainRectangle_MouseLeave"MouseMove="mainRectangle_MouseMove"MouseDown="mainRectangle_MouseDown"MouseWheel="mainRectangle_MouseWheel"/>privatevoidmainRectangle_MouseEnter(objectsender,MouseEventArgse){//鼠標(biāo)進(jìn)入控件時(shí),控件的顏色為紅色

mainRectangle.Fill=newSolidColorBrush(Colors.Red);5:}privatevoidmainRectangle_MouseLeave(objectsender,MouseEventArgse){//鼠標(biāo)離開控件時(shí),控件的顏色為紅色mainRectangle.Fill=newSolidColorBrush(Colors.White);}privatevoidmainRectangle_MouseMove(objectsender,MouseEventArgse){//獲取基于Rectangle的鼠標(biāo)的坐標(biāo)PointpointBaseRectangle=Mouse.GetPosition(mainRectangle);txtMessage.Text=string.Format("MousePosition(BasetheRectangle)is({0},{1})",pointBaseRectangle.X,pointBaseRectangle.Y);txtMessage.Text+="\r\n";//獲取基于窗體的鼠標(biāo)的坐標(biāo)PointpointBaseWindow=Mouse.GetPositionthis);txtMessage.Text+=string.Format("MousePosition(BasetheWindow)is({0},{1})”,

27:pointBaseWindow.X,pointBaseWindow.Y);27:}privatevoidmainRectangle_MouseDown(objectsender,MouseButtonEventArgse)(//獲取點(diǎn)出的鼠標(biāo)的按鈕MouseButtonbutton=e.ChangedButton;txtMessage.Text+="\r\n";txtMessage.Text+=string.Format("MouseButtonis{0}",button.ToString());}privatevoidmainRectangle_MouseWheel(objectsender,MouseWheelEventArgse){if(e.Delta>0)TOC\o"1-5"\h\z{//如果向上推動滾輪,圖形的寬度增加rectangle1.Width++;}if (e.Delta<0){//如果向下推動滾輪,圖形的寬度減小rectanglel.Width--;}53:}

三、焦點(diǎn)處理在WPF中,有兩個與焦點(diǎn)有關(guān)的主要概念:鍵盤焦點(diǎn)和邏輯焦點(diǎn)。鍵盤焦點(diǎn)指接收鍵盤輸入的元素,而邏輯焦點(diǎn)指焦點(diǎn)范圍中具有焦點(diǎn)的元素。1、鍵盤焦點(diǎn):鍵盤焦點(diǎn)指當(dāng)前正在接收鍵盤輸入的元素。在整個桌面上,只能有一個具有鍵盤焦點(diǎn)的元素。在WPF中,具有鍵盤焦點(diǎn)的元素會將IsKeyboardFocused設(shè)置為true。Keyboard類的靜態(tài)屬性FocusedElement獲取當(dāng)前具有鍵盤焦點(diǎn)的元素。為了使元素能夠獲取鍵盤焦點(diǎn),基元素的Focusable和IsVisible屬性必須設(shè)置為true。有些類(如Panel基類)默認(rèn)情況下將Focusable設(shè)置為false;因此,如果您希望此類元素能夠獲取鍵盤焦點(diǎn),必須將Focusable設(shè)置為true??梢酝ㄟ^用戶與UI交互(例如,按Tab鍵定位到某個元素或者在某些元素上單擊鼠標(biāo))來獲取鍵盤焦點(diǎn)。還可以通過使用Keyboard類的Focus方法,以編程方式獲取鍵盤焦點(diǎn)。Focus方法嘗試將鍵盤焦點(diǎn)給予指定的元素。返回的元素是具有鍵盤焦點(diǎn)的元素,如果有舊的或新的焦點(diǎn)對象阻止請求,則具有鍵盤焦點(diǎn)的元素可能不是所請求的元素。2、邏輯焦點(diǎn)邏輯焦點(diǎn)指焦點(diǎn)范圍中的FocusManager..::.FocusedElement。焦點(diǎn)范圍是一個跟蹤其范圍內(nèi)的FocusedElement的元素。當(dāng)鍵盤焦點(diǎn)離開焦點(diǎn)范圍時(shí),焦點(diǎn)元素會失去鍵盤焦點(diǎn),但保留邏輯焦點(diǎn)。當(dāng)鍵盤焦點(diǎn)返回到焦點(diǎn)范圍時(shí),焦點(diǎn)元素會再次獲得鍵盤焦點(diǎn)。這使得鍵盤焦點(diǎn)可以在多個焦點(diǎn)范圍之間切換,但確保了在焦點(diǎn)返回到焦點(diǎn)范圍時(shí),焦點(diǎn)范圍中的焦點(diǎn)元素再次獲得鍵盤焦點(diǎn)。一個應(yīng)用程序中可以有多個具有邏輯焦點(diǎn)的元素,但在一個特定的焦點(diǎn)范圍中只能有一個具有邏輯焦點(diǎn)的元素。GetFocusScope返回指定元素的焦點(diǎn)范圍。

WPF中默認(rèn)情況下即為焦點(diǎn)范圍的類有Window、Menuitem、ToolBar和ContextMenUoGetFocusedElement獲取指定焦點(diǎn)范圍的焦點(diǎn)元素。SetFocusedElement設(shè)置指定焦點(diǎn)范圍中的焦點(diǎn)元素。SetFocusedElement通常用于設(shè)置初始焦點(diǎn)元素。3、鍵盤導(dǎo)航當(dāng)按下導(dǎo)航鍵之一時(shí),KeyboardNavigation類將負(fù)責(zé)實(shí)現(xiàn)默認(rèn)鍵盤焦點(diǎn)導(dǎo)航。導(dǎo)航鍵有:Tab、Shift+Tab、Ctrl+Tab、Ctrl+Shift+Tab、向上鍵、向下鍵、向左鍵和向右鍵。可以通過設(shè)置附加的KeyboardNavigation屬性TabNavigation、ControlTabNavigation和DirectionalNavigation來更改導(dǎo)航容器的導(dǎo)航行為。這些屬性是KeyboardNavigationMode類型,可能值有Continue、Local、Contained、Cycle、Once以及None。默認(rèn)值是Continue,這意味著元素不是導(dǎo)航容器。4、焦點(diǎn)事件與鍵盤焦點(diǎn)相關(guān)的事件有PreviewGotKeyboardFocus、GotKeyboardFocus、PreviewLostKeyboardFocus

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論