WPF使用VisualTreeHelper進(jìn)行命中測試
一、簡介
我們有時候又需求從當(dāng)前視覺樹中找一些東西,比如鼠標(biāo)按下的時候,看看鼠標(biāo)下的元素都有什么。又比如某塊區(qū)域下有哪些元素?某個坐標(biāo)點(diǎn)下有哪些元素?這些需求在使用 命中測試的時候,可以非常方便和快速的去找到我們需要的內(nèi)容。
二、代碼案例
我在一個畫板上在不同的位置放了3個圓形。給他們放置了不同的位置和填充不同的顏色,我們通過命中測試判斷如果鼠標(biāo)在圓上抬起了,我們讀取當(dāng)前圓的填充顏色。
XAML:
<Grid MouseLeftButtonUp="Grid_MouseLeftButtonUp"> <Canvas> <!--三個圓形--> <Ellipse Canvas.Left="30" Canvas.Top="200" Width="130" Height="130" Fill="Blue"/> <Ellipse Canvas.Left="110" Canvas.Top="0" Width="130" Height="130" Fill="Red"/> <Ellipse Canvas.Left="220" Canvas.Top="100" Width="130" Height="130" Fill="Yellow"/> <TextBlock Canvas.Left="0" Canvas.Top="0" Text="抬起鼠標(biāo)左鍵,開始對鼠標(biāo)所在點(diǎn)進(jìn)行命中測試" /> </Canvas> </Grid>
后臺邏輯:
private void Grid_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { var ellipse = GetVisual(e.GetPosition(this)); MessageBox.Show(ellipse?.Fill?.ToString()); } private Ellipse GetVisual(Point point) { HitTestResult hitResult = VisualTreeHelper.HitTest(this, point); var ellipse = hitResult.VisualHit as Ellipse; return ellipse; }
三、運(yùn)行效果
到此這篇關(guān)于WPF使用VisualTreeHelper進(jìn)行命中測試的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
asp.net c#采集需要登錄頁面的實(shí)現(xiàn)原理及代碼
當(dāng)我們采集頁面的時候,如果被采集的網(wǎng)站需要登錄才能采集,原理搞清楚了,就好辦了,我們所要做的僅僅是在采集的時候(或者說HttpWebRequest提交數(shù)據(jù)的時候),將Cookie信息放入Http請求頭里面就可以了,感興趣的朋友可以了解下,或許對你有所幫助2013-02-02.net 中按.(點(diǎn))無法智能提示的bug解決方案
IDE按.無法智能提示,但是可以編譯并正常使用,在修改別人代碼bug時遇到的,接下來為你提供詳細(xì)解決方法,感興趣的你可以參考下哈2013-03-03合并兩個DataSet的數(shù)據(jù)內(nèi)容的方法
合并兩個DataSet的數(shù)據(jù)內(nèi)容的方法,需要的朋友可以參考一下2013-03-03安裝.NET Framework進(jìn)度條卡住不動的解決方案(推薦)
VS在安裝之前需要安裝.NET Framework,我安裝的是4.0版本。但是安裝進(jìn)度條到一半左右時就卡住不動了。前前后后重試多次,還有幾次重新開機(jī),但都沒用,怎么解決呢,下面給大家分享下解決方案2016-12-12詳解在Windows下如何使用AspNetCore Api 和consul
這篇文章主要介紹了詳解在Windows下如何使用AspNetCore Api 和consul,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06