Привязка / Липкий Windows WPF

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

По сути, подход к выяснению, касался ли пользователь экрана или вместо этого использовал мышь / трекпад, заключается в регистрации на странице событий 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
})();

Подробнее здесь .

16
задан Community 23 May 2017 в 12:24
поделиться

3 ответа

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/

7
ответ дан 30 November 2019 в 23:14
поделиться

Библиотека стыковки WPF может предоставить то, что вы ищете, но я не уверен, работает ли она на всем экране или только в окне вашего приложения.

0
ответ дан 30 November 2019 в 23:14
поделиться

HuddledMasses.org имеет очень хороший пример привязки к краям экрана (снизу также хорошая структура с открытым исходным кодом)

HuddledMasses - окна WPF, которые привязываются к краям экрана

Однако в нем отсутствует привязка к краям экрана. другие окна. На CodeProject есть еще одно решение. Это липкие окна Windows Forms. Там вы можете найти реализацию для обнаружения и привязки ближайшего окна, которую вы / я / или кто-то другой должны реализовать в стиле WPF.

Code Project - Sticky windows


Edit: Я создал решение на основе приведенного выше текста

Ссылка для загрузки решения WPF Sticky Windows

3
ответ дан 30 November 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: