В событии MouseMove, как определить, находится ли курсор на определенном расстоянии от края? - PullRequest
1 голос
/ 23 февраля 2010

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

e.GetPosition(this)

к месту +/- размеры.
Как получить позицию объекта относительно того же корня, что e.GetPosition (this) возвращает свою точку? e.GetPosition (this) возвращает точку относительно этого; Как я могу определить, если point.x 1 пиксель или 12 пикселей от края содержащего объекта. Цель состоит в том, чтобы узнать, находится ли мышь на определенном расстоянии от края объекта.
Спасибо за любой совет.

Ответы [ 2 ]

0 голосов
/ 23 февраля 2010

Я делал это слишком сложно ...

MouseEnter()
{
        double txtBoxLeft = Canvas.GetLeft(sidesStackPanel);
        double txtBoxRight = txtBoxLeft + sidesStackPanel.ActualWidth;

        Point p = e.GetPosition(null);
        _leftGully = txtBoxLeft + _gullyWidth;
        _rightGully = txtBoxRight - _gullyWidth;
}
MouseMove()
{
    StackPanel sp = sender as StackPanel;

    if (null != sp)
    {
        Point p = e.GetPosition(sp);
        if (p.X <= _leftGully)
        {
            System.Diagnostics.Debug.WriteLine("  Move: In left gully");
        }
        else if (p.X >= _rightGully)
        {
            System.Diagnostics.Debug.WriteLine("  Move: In right gully");
        }
    }
}
0 голосов
/ 23 февраля 2010

Функция MouseEventArgs GetPosition () возвращает позицию относительно переданного ей элемента фреймворка (то есть рассматриваемый FrameworkElement может иметь значение this, но это не обязательно). Таким образом, вы могли бы написать что-то вроде:

bool isNearTarget=false;
FrameworkElement targetObject;
double nearDistance;

Point location=e.GetPosition(targetObject);
if((location.X>(-nearDistance)) && (location.X<nearDistance) ||
   (location.Y>(-nearDistance)) && (location.Y<nearDistance) ||
   (location.X>(targetObject.Width - nearDistance)) && 
       (location.X<targetObject.Width + nearDistance)) ||
   (location.Y>(targetObject.Height - nearDistance)) && 
       (location.Y<targetObject.Height + nearDistance)))
 {   
    isNearTarget=true;
 {
...