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,容器)
然后在稍后测试该项是否为特定类型,并执行您编写的操作,第一次起作用。谢谢