В Silverlight, как вы определяете, какой объект в данный момент находится под мышью по координатам? - PullRequest
1 голос
/ 15 января 2009

У меня есть object1 как дочерний элемент Canvas. У object1 есть обработчик события MouseLeftButtonDown, который захватывает объект.

object1.CaptureMouse();  

Удерживая левую кнопку мыши, я перемещаю мышь над объектом2. В коде, как мне узнать, находится ли мышь над объектом 2 (или определить, над каким объектом она находится в данный момент)?

Насколько я могу судить, я не могу использовать обработчик событий мыши для object2, поскольку вызов метода CaptureMouse () объекта object1 отключает другие события мыши, пока я не вызову метод ReleaseMouseCapture () объекта object.

Ответы [ 3 ]

1 голос
/ 15 января 2009

Вы захотите использовать System.Windows.VisualTreeHelper :

VisualTreeHelper.FindElementsInHostCoordinates будет "Извлекает набор объектов, которые находятся в пределах указанной точки координатного пространства объекта."

есть две перегрузки функции, одна из которых получает Point, а другая - Rect.

0 голосов
/ 15 января 2009

Эта статья была несколько полезной, так что спасибо за это. Тем не менее, это так:

"вы можете использовать аргументы события, передаваемые в этот обработчик событий, чтобы определить, где в данный момент находится мышь, и, таким образом, определить, где она находится относительно координат другого объекта, которые вас интересуют."

... что я пытаюсь определить.

Я могу получить текущую позицию мыши. Чего я не знаю, как это сделать, так это получить координаты нового объекта (object2) и затем определить, находится ли текущая позиция мыши внутри объекта 2.

В случае формы Shape, может быть решение, если посмотреть на геометрию клипа Shape, но в моем случае object2 - это Canvas, поэтому он не совсем работает.

0 голосов
/ 15 января 2009

Вы правы в том, что вызов CaptureMouse () будет предотвращать другие события мыши.

Если вы затем подключитесь к событию MouseMove объекта1, вы можете использовать аргументы события, переданные в этот обработчик событий, чтобы определить, где в данный момент находится мышь, и тем самым определить, где она находится относительно координат другого объекта, которые вас интересуют. с.

Эта статья не совсем охватывает то, что вы хотите, но содержит некоторые вещи, которые могут помочь вам понять, что вы пытаетесь сделать:

http://jesseliberty.com/2009/01/13/drag-and-drop-with-managed-code/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...