当用户将鼠标移到一个对象上时,我正试图在我的MouseMove事件处理程序中进行一些命中测试,以检测光标何时与对象边缘相距一定距离。我怀疑在MouseEnter处理程序中我需要存储对象的位置,然后在MouseMove中比较
e.GetPosition(this)
到+/-尺寸的位置。
如何获取对象相对于e.GetPosition(this)返回其Point的同一根的位置? e.GetPosition(this)返回一个相对于此的点;如何确定point.x是否是包含对象边缘的1个像素或12个像素。
目标是知道鼠标是否与物体边缘的距离相等
谢谢你的任何建议。
答案 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");
}
}
}