Отключить выбор и событие itemInvoke для определенного элемента в списке

У меня есть список. По умолчанию для всех элементов включены itemInvoke и single-selection. Но теперь я хотел бы отключить selection и itemInvoke (и событие, и анимацию) для одного конкретного элемента с идентификатором «disableMe». Есть ли способ сделать это? Или можно отключить событие для всей группы (не для всего списка).?


person louis.luo    schedule 11.05.2012    source источник


Ответы (1)


Отвечая на мой собственный вопрос, потому что я случайно понял это сегодня. Пожалуйста, посоветуйте, если у вас есть лучшее решение для этой проблемы.

В приложении Metro Style выбор в элементе управления ListView обычно можно активировать Right-Click с помощью мыши или небольшим «перетаскиванием»/«пролистыванием» касанием. Чтобы отключить сенсорный выбор, вам нужно перезаписать обработчик событий MSPointerDown для этого конкретного элемента. Чтобы отключить выбор «Правой кнопкой мыши», вам необходимо перезаписать событие oncontextmenu для этого конкретного элемента.

Если вы создаете itemTemplate в Javascript:

function listViewItemTemplate(item) {
    // data has boolean properties called 'doNotSelectMe' and 'doNotInvokeMe'
    var data = item.data._value;

    var itemElement = document.createElement('div');
    var itemElement.id = 'testElement';

    if (data.doNotSelectMe) {
        // disable mouse selection
        itemElement.oncontextmenu = function (e) { e.stopPropagation(); };
        // disable touch selection
        itemElement.addEventListener('MSPointerDown', function (e) {
                                          e.stopPropagation();
                                     });
    }

    if (data.doNotInvokeMe) {
        //disable item invoke event
        itemElement.onclick = function (e) { e.stopPropagation(); };
    }

    return {element: itemElement}

}
person louis.luo    schedule 15.06.2012
comment
Итак, я выбираю шаблон динамически: element = document.querySelector(".inputTemplate");, а затем вскоре после этого визуализирую его в новый контейнер: var container = document.createElement("div"); element.winControl.render(currentItem.data, container);, а затем проверяю, относится ли элемент к определенному типу, и делаю то, что вы написали, сработало в первый раз. спасибо - person Robb C; 30.08.2012