我们在 Silverlight 2 应用程序中使用弹出窗口;这些可以通过单击标题栏并拖动以标准方式移动。如果标题栏被拖出浏览器镶边后面的站点,则无法再移动窗口。
我们有用户认为这是有问题的,我想知道当窗口卡在 chrome 后面时是否有其他方法可以移动窗口。
或者也许一种防止弹出窗口的任何部分超出窗口的方法会更好。
我们在 Silverlight 2 应用程序中使用弹出窗口;这些可以通过单击标题栏并拖动以标准方式移动。如果标题栏被拖出浏览器镶边后面的站点,则无法再移动窗口。
我们有用户认为这是有问题的,我想知道当窗口卡在 chrome 后面时是否有其他方法可以移动窗口。
或者也许一种防止弹出窗口的任何部分超出窗口的方法会更好。
您的鼠标移动以离散的时间间隔报告。也就是说,您移动鼠标的速度越快,报告的鼠标位置就越远。将鼠标从窗口内快速拖动到窗口外可以报告一个在窗口内的位置(PointA),而下一个报告将在窗口外(PointB)。如果您在拖动时使用 CaptureMouse 调用,您仍然可以在指针位于主机窗口之外时收到鼠标位置报告。当您发现您已经移出窗口时,您可以假设鼠标位于窗口边缘。也就是说,如果您要从 PointA 到 PointB 绘制一条假想线,您可以假设您的最后一点是该线穿过窗口边界的位置。如果您不使用 MouseCapture,或者您使用的是无窗口插件,我不会 不要认为在窗口外拖动时会看到鼠标事件。在这种情况下,估计鼠标越过窗口边界的位置更加困难。
经过一番挖掘,我发现弹出窗口没有标准的拖动机制,但一位同事已经实现了它。很容易扩展代码以将弹出窗口限制在主机窗口中。虽然它的行为有点奇怪。缓慢而平滑的拖动允许弹出窗口向上移动到主窗口的边缘,但快速不稳定的拖动会导致它在完全到达边缘之前停止。仍在试图弄清楚为什么会这样。
处理此问题的最佳方法是防止用户将其拖到浏览器窗口之外。为此,您可以获得Silverlight 主机控件的宽度和高度。获得该信息后,您可以在用户拖动窗口时检查窗口的位置,并且不要让它们超出窗口的范围。
可能是因为 Mouse_Leave 事件正在触发吗?