2008-11-19 6 views
1

Мы используем всплывающие окна в приложении Silverlight 2; их можно перемещать стандартным способом, щелкая по строке заголовка и перетаскивая их. Если строка заголовка выведена за пределы браузера Chrome, окно больше не может перемещаться.Перемещение Silverlight 2 всплывающих окон

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

Или, возможно, было бы лучше предотвратить любую часть всплывающего окна из окна.

ответ

1

После того, как я раскололся, я обнаружил, что для всплывающих окон нет стандартного механизма перетаскивания, но его коллега выполнил его. Было легко расширить код, чтобы ограничить всплывающее окно в окне хоста. Это ведет себя немного странно. Медленное и плавное перетаскивание позволяет всплывающему окну перемещаться прямо до края окна хоста, но быстрое перетаскивание перетаскивает его, чтобы остановить его, прежде чем достигнуть края. Все еще пытаюсь понять, почему это так.

0

Лучший способ справиться с этим - предотвратить перемещение пользователя за пределы окна браузера. Для этого вы можете получить ширину и высоту Silverlight host control. После того, как у вас есть эта информация, вы можете проверить расположение окна, когда пользователь перетаскивает его и не позволяет им выйти за пределы окна.

2

Движения мыши сообщаются с дискретными временными интервалами. То есть, чем быстрее вы перемещаете мышь, тем дальше сообщаете о местоположении мыши. Быстрое перетаскивание мыши изнутри внутрь за окном может сообщать о позиции внутри окна (PointA), а следующий отчет будет за пределами окна (PointB). Если вы используете вызов CaptureMouse во время перетаскивания, вы все равно можете получать отчеты о позиции мыши, в то время как указатель находится за пределами окна хоста. Когда вы обнаружите, что вы перешли за пределы окна, вы можете предположить, что мышь находится на краю окна. То есть, если бы вы рисовали воображаемую линию от PointA до PointB, вы можете предположить, что ваша последняя точка - это то, где эта линия пересекала границу окна. Если вы не используете MouseCapture или используете плагин без окон, я не думаю, что вы увидите события мыши при перетаскивании за пределы окна. В этом случае оценка положения, где мышь пересекала границу окна, сложнее.

0

не может быть, потому что событие Mouse_Leave стреляет?