Windows 8 禁用listview中特定项的选择和itemInvoke事件

Windows 8 禁用listview中特定项的选择和itemInvoke事件,windows-8,windows-runtime,winjs,Windows 8,Windows Runtime,Winjs,我有一个列表视图。默认情况下,所有项目都启用了itemInvoke和单一选择。但是现在,我想禁用选择和项目调用(事件和动画),以一个id为“disableMe”的特定项目。有办法吗?或者可以为整个组(而不是整个listview)禁用事件吗?回答我自己的问题,因为我今天碰巧弄明白了。如果您对此问题有更好的解决方案,请提供建议 在Metro风格的应用程序中,ListView控件中的选择通常可以通过鼠标右键单击来触发,或者通过触摸来进行小的“拖动”/“滑动”。要禁用触摸选择,您需要覆盖该特定项目的MS

我有一个列表视图。默认情况下,所有项目都启用了
itemInvoke
单一选择
。但是现在,我想禁用
选择
项目调用
(事件和动画),以一个id为“disableMe”的特定项目。有办法吗?或者可以为整个组(而不是整个listview)禁用事件吗?

回答我自己的问题,因为我今天碰巧弄明白了。如果您对此问题有更好的解决方案,请提供建议

在Metro风格的应用程序中,ListView控件中的选择通常可以通过鼠标右键单击来触发,或者通过触摸来进行小的“拖动”/“滑动”。要禁用触摸选择,您需要覆盖该特定项目的
MSPointerDown
事件处理程序。要禁用“右键单击”选择,您需要覆盖该特定项目的
oncontextmenu
事件

如果您正在
Javascript
中创建
itemTemplate

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}

}

所以我动态地选择模板:
element=document.querySelector(“.inputTemplate”)
然后很快将其呈现给一个新容器:
var container=document.createElement(“div”)
元素.winControl.render(currentItem.data,容器)
然后在稍后测试该项是否为特定类型,并执行您编写的操作,第一次起作用。谢谢