Gibt es einen Weg mit WPF, um ein Array von Elementen unter der Maus auf einem MouseMove-Ereignis zu erhalten?WPF Get Element (s) unter Maus
Antwort
Von "WPF Unleashed", Seite 383:
Visuelle Treffertests können Sie informieren über alle
Visual
s, die eine Lage schneiden, [...] Sie müssen mit [...] die[VisualTreeHelper.]HitTest
Methode, die einenHitTestResultCallback
Delegierten akzeptiert. Vor diese Version vonHitTest
zurückkehrt, wird der Delegat einmal für jeden relevantenVisual
aufgerufen, beginnend mit dem obersten und am Ende ganz unten.
Die Signatur eines solchen Callback ist
HitTestResultBehavior Callback(HitTestResult result)
und es hat HitTestResultBehaviour.Continue
zurückzukehren weitere Treffer zu erhalten, wie unten gezeigt (aus der verknüpften Seite auf 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;
}
Für weitere Informationen konsultieren Sie bitte die MSDN documentation for VisualTreeHelper.HitTest
.
Können Sie die VisualTreeHelper.HitTest verwenden?
http://lukieb.blogspot.com/2008/07/visualtreehelperhittest.html
Die im verknüpften Beispiel verwendete Überladung ([die wahrscheinlich auch direkt in der Antwort repliziert werden sollte] (http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-) Links-woanders-wirklich-gute-Antworten)) findet nur das oberste Element an der Mausposition, jedoch nicht ein Array von Elementen unter der Maus. –
Sie können auch versuchen, die Mouse.DirectlyOver Eigenschaft mit dem obersten Element zu erhalten, die unter der Maus ist.
Dies wird ** nicht ** ein Array von Elementen unter der Maus bereitstellen, aber tatsächlich nur das oberste Element zurückgeben. –
Siehe den folgenden msdn-Link (Abschnitt: Verwenden eines Treffertest-Ergebnis-Callback) für ein gutes Beispiel. [http://msdn.microsoft.com/en-us/library/ms752097.aspx](http://msdn.microsoft.com/en-us/library/ms752097.aspx] –
Seite 503 in der Ausgabe 2010 von das Buch. FYI. – Sabuncu
Beachten Sie, dass Sie ein visuelles Baumelement erhalten, das die meiste Zeit nicht benötigt wird. Sie müssen rekursiv durch die Eltern der Treffer suchen, um Ihre logischen Ansichtselemente zu erhalten. – henon