可以在WinJS/Windows 8应用程序中以编程方式设置ListView的布局吗?

可以在WinJS/Windows 8应用程序中以编程方式设置ListView的布局吗?,listview,windows-8,microsoft-metro,winjs,Listview,Windows 8,Microsoft Metro,Winjs,我有一个ListView模板,正在多个地方使用,我想动态更改布局类型: <div class="sorteditemslist" arial-label="sorted items" data-win-control="WinJS.UI.ListView" data-win-options="{layout: { type: WinJS.UI.ListLayout}}" data-win-bind="winControl.itemDataSource: items.da

我有一个ListView模板,正在多个地方使用,我想动态更改布局类型:

<div class="sorteditemslist" arial-label="sorted items" 
   data-win-control="WinJS.UI.ListView"
   data-win-options="{layout: { type: WinJS.UI.ListLayout}}"
   data-win-bind="winControl.itemDataSource: items.dataSource; winControl.iteminvoked: ItemInvoked;">


默认的布局类型是
WinJS.UI.GridLayout
,但在某些情况下,我想将其更改为
ListLayout

是的,这是可能的。我能够使用以下代码使其正常工作:

var listView = element.querySelector(".sorteditemslist").winControl;
WinJS.ui.setOptions(listView, { layout: { type: WinJS.UI.ListLayout }});

另外,确保在模板中拉出对布局的引用,或者在代码中处理这两种情况。有关布局的更多信息,请参见@wloescher指出的

,您可以使用:

listViewElem.layout = new WinJS.UI.GridLayout({ orientation: 'horizontal', maxRows: 1 });

您可以跳过setOptions调用,只需执行以下操作:listView.layout={type:WinJS.UI.ListLayout};我发现当出现问题时,这更容易调试。您还可以使用以下语法:listView.layout=new WinJS.UI.ListLayout