Самая большая проблема с попыткой обнаружить касание - это гибридные устройства, которые поддерживают как сенсорное управление, так и трекпад / мышь. Даже если вы в состоянии правильно определить, поддерживает ли устройство пользователя касание, вам действительно нужно определить, какое устройство ввода пользователь в настоящее время использует. Здесь есть подробное описание этой проблемы и возможное решение здесь .
По сути, подход к выяснению, касался ли пользователь экрана или вместо этого использовал мышь / трекпад, заключается в регистрации на странице событий touchstart
и mouseover
:
document.addEventListener('touchstart', functionref, false) // on user tap, "touchstart" fires first
document.addEventListener('mouseover', functionref, false) // followed by mouse event, ie: "mouseover"
Сенсорное действие вызовет оба этих события, хотя первое (touchstart
) всегда будет первым на большинстве устройств. Таким образом, рассчитывая на эту предсказуемую последовательность событий, вы можете создать механизм, который динамически добавляет или удаляет класс can-touch
к корню документа, чтобы отразить текущий тип ввода пользователя пользователя на данный момент в документе:
;(function(){
var isTouch = false //var to indicate current input type (is touch versus no touch)
var isTouchTimer
var curRootClass = '' //var indicating current document root class ("can-touch" or "")
function addtouchclass(e){
clearTimeout(isTouchTimer)
isTouch = true
if (curRootClass != 'can-touch'){ //add "can-touch' class if it's not already present
curRootClass = 'can-touch'
document.documentElement.classList.add(curRootClass)
}
isTouchTimer = setTimeout(function(){isTouch = false}, 500) //maintain "istouch" state for 500ms so removetouchclass doesn't get fired immediately following a touch event
}
function removetouchclass(e){
if (!isTouch && curRootClass == 'can-touch'){ //remove 'can-touch' class if not triggered by a touch event and class is present
isTouch = false
curRootClass = ''
document.documentElement.classList.remove('can-touch')
}
}
document.addEventListener('touchstart', addtouchclass, false) //this event only gets called when input type is touch
document.addEventListener('mouseover', removetouchclass, false) //this event gets called when input type is everything from touch to mouse/ trackpad
})();
Подробнее здесь .
Here my project that make your wpf app snapping / sticky. It works great:
http://programminghacks.net/2009/10/19/download-snapping-sticky-magnetic-windows-for-wpf/
Библиотека стыковки WPF может предоставить то, что вы ищете, но я не уверен, работает ли она на всем экране или только в окне вашего приложения.
HuddledMasses.org имеет очень хороший пример привязки к краям экрана (снизу также хорошая структура с открытым исходным кодом)
HuddledMasses - окна WPF, которые привязываются к краям экрана
Однако в нем отсутствует привязка к краям экрана. другие окна. На CodeProject есть еще одно решение. Это липкие окна Windows Forms. Там вы можете найти реализацию для обнаружения и привязки ближайшего окна, которую вы / я / или кто-то другой должны реализовать в стиле WPF.
Edit: Я создал решение на основе приведенного выше текста