轉(zhuǎn)帖|其它|編輯:郝浩|2011-03-09 13:11:11.000|閱讀 910 次
概述:在WPF中,XAML的樹(shù)狀的結(jié)構(gòu),主要分成兩種。一種是LogicalTree,簡(jiǎn)單的說(shuō)就是訊息傳遞的路徑;另一種是VisualTree,就是我們視覺(jué)上的物件階層。會(huì)遇到這個(gè)主題,是因?yàn)槲业腤PF AP有一個(gè)DataGrid,并且有滑鼠右鍵選單的功能,不過(guò)我希望滑鼠右鍵在有資料的ROW上面點(diǎn)選和單純DataGrid背景點(diǎn)選時(shí)出現(xiàn)的Menu是不同的,所以我必須知道點(diǎn)下去的時(shí)候點(diǎn)到了哪個(gè)東西,進(jìn)而找到了這個(gè)主題。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
在WPF中,XAML的樹(shù)狀的結(jié)構(gòu),主要分成兩種。一種是LogicalTree,簡(jiǎn)單的說(shuō)就是訊息傳遞的路徑;另一種是VisualTree,就是我們視覺(jué)上的物件階層。會(huì)遇到這個(gè)主題,是因?yàn)槲业腤PF AP有一個(gè)DataGrid,并且有滑鼠右鍵選單的功能,不過(guò)我希望滑鼠右鍵在有資料的ROW上面點(diǎn)選和單純DataGrid背景點(diǎn)選時(shí)出現(xiàn)的Menu是不同的,所以我必須知道點(diǎn)下去的時(shí)候點(diǎn)到了哪個(gè)東西,進(jìn)而找到了這個(gè)主題。
在Row上點(diǎn)右鍵
沒(méi)有在Row上點(diǎn)右鍵
先簡(jiǎn)單介紹InputHitTest
先簡(jiǎn)單介紹InputHitTest
他定義在UIElement中,回傳IInputElement介面
主要功能是依據(jù)傳入的座標(biāo)取得此座標(biāo)下的物件
而傳入的座標(biāo)是相對(duì)于唿叫此方法的物件
再來(lái)會(huì)用到VisualTreeHelper.GetParent這個(gè)方法
他會(huì)依據(jù)視覺(jué)樹(shù)找到傳入物件的上層物件
因此,要完成檢查滑鼠是不是有點(diǎn)到ROW
只要不斷往上找,看有沒(méi)有找到DataGridRow
如果已經(jīng)找到DataGrid了卻還沒(méi)遇到DataGridRow,那就表示沒(méi)有點(diǎn)在ROW上
程式碼像是這樣:
1: private void ClearSelect(object obj) {
2: System.Windows.Controls.DataGrid dg = obj as System.Windows.Controls.DataGrid;
3: System.Windows.IInputElement element = dg.InputHitTest(Mouse.GetPosition(dg));
4: while (element != dg) {
5: if (element != null && element is System.Windows.Controls.DataGridRow) {
6: //有點(diǎn)到資料,看要做甚麼
7: return;
8: } else {
9: element = System.Windows.Media.VisualTreeHelper.GetParent(element as System.Windows.DependencyObject) as System.Windows.IInputElement;
10: }
11: }
12: //沒(méi)點(diǎn)到資料,看要做甚麼
13: }
14:
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載