在MouseMove事件中,如何确定光标是否是边缘的某个距离?

时间:2010-02-22 23:53:01

标签: silverlight silverlight-3.0

当用户将鼠标移到一个对象上时,我正试图在我的MouseMove事件处理程序中进行一些命中测试,以检测光标何时与对象边缘相距一定距离。我怀疑在MouseEnter处理程序中我需要存储对象的位置,然后在MouseMove中比较

e.GetPosition(this)

到+/-尺寸的位置。
如何获取对象相对于e.GetPosition(this)返回其Point的同一根的位置? e.GetPosition(this)返回一个相对于此的点;如何确定point.x是否是包含对象边缘的1个像素或12个像素。 目标是知道鼠标是否与物体边缘的距离相等 谢谢你的任何建议。

2 个答案:

答案 0 :(得分:0)

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;
 {

答案 1 :(得分:0)

我太复杂了......

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");
        }
    }
}