2008-09-05 9 views

Odpowiedz

34

Od "WPF Unleashed", strona 383:

Badania wizualne hitem może poinformować o wszystkieVisual s, które przecinają lokalizacja, [...] należy użyć [...] metoda akceptująca delegata [VisualTreeHelper.]HitTest. Przed zwróceniem tej wersji tej wersji HitTest delegat jest wywoływany jeden raz dla każdego odpowiedniego , zaczynając od najwyższego i kończąc na najniższym.

Podpis takiego zwrotnego jest

HitTestResultBehavior Callback(HitTestResult result) 

i musi powrócić HitTestResultBehaviour.Continue otrzymywać dodatkowe uderzenia, jak pokazano poniżej (z połączonego strony na MSDN):

// Return the result of the hit test to the callback. 
public HitTestResultBehavior MyHitTestResult(HitTestResult result) 
{ 
    // Add the hit test result to the list that will be processed after the enumeration. 
    hitResultsList.Add(result.VisualHit); 

    // Set the behavior to return visuals at all z-order levels. 
    return HitTestResultBehavior.Continue; 
} 

Aby uzyskać więcej informacji, zapoznaj się z MSDN documentation for VisualTreeHelper.HitTest.

+5

Zobacz poniższy link msdn (sekcja: Używanie połączenia zwrotnego wyników testu uderzenia) jako dobry przykład. [http://msdn.microsoft.com/en-us/library/ms752097.aspx](http://msdn.microsoft.com/en-us/library/ms752097.aspx) –

+1

Page 503 w edycji 2010 książka. FYI. – Sabuncu

+1

Zwróć uwagę, że dostajesz wizualny element drzewa, który w większości przypadków nie jest tym, czego potrzebujesz. Musisz przeszukiwać rodziców rekursywnie, aby uzyskać logiczne elementy widoku. – henon

3
+0

Przeciążenie używane w połączonym przykładzie ([prawdopodobnie powinno być również replikowane bezpośrednio w odpowiedzi) (http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain- links-elsewhere-really-good-answers)) tylko znajdzie najwyższy element w lokalizacji myszy, ** nie ** tablicę elementów pod myszą. –

36

Można również spróbować użyć właściwość Mouse.DirectlyOver aby uzyskać najwyższej największy element, który jest pod mysz.

+0

To ** nie ** zapewni tablicę elementów pod myszą, ale rzeczywiście tylko zwróci najwyższy element. –