Перемещение всплывающих окон Silverlight 2 - PullRequest
1 голос
/ 19 ноября 2008

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

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

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

Ответы [ 4 ]

2 голосов
/ 26 мая 2009

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

1 голос
/ 20 ноября 2008

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

0 голосов
/ 18 января 2010

Может ли это быть из-за запуска события Mouse_Leave ??

0 голосов
/ 19 ноября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...