【问题标题】:Switching from GridView to ListView when Windows Store app is snapped捕捉 Windows 应用商店应用程序时从 GridView 切换到 ListView
【发布时间】:2013-04-27 16:43:40
【问题描述】:

当应用程序被捕捉时,我正在尝试将我的 listView 控件的布局从“GridView”更改为“ListView”。当然,它应该在任何其他状态下返回“GridView”。我写了一些代码,但它不起作用,所以我想知道为什么......

这是我写的代码:

var viewState = Windows.UI.ViewManagement.ApplicationView;
var list = document.getElementById("messageDisplay").winControl;
if (viewState == Windows.UI.ViewManagement.ApplicationViewState.snapped) {
    list.layout = new WinJS.UI.ListLayout();
}
else
{
    list.layout = new WinJS.UI.GridLayout();
}

【问题讨论】:

  • 页面的js文件中的“updateLayout”函数中是否定义了代码?如果是这样,则传递的参数之一是 viewState。此外,您似乎可以使用媒体查询来处理这个问题,只是一个想法。
  • 共享代码初始化listview其他属性,如itemDataSource、groupDataSource、itemTemplate、groupHeaderTemplate和updateLayout方法。
  • FWIW:仅从处理这两种情况的样式角度来看,我们在使其正常工作时遇到了问题——这使得它非常混乱。在某些情况下,我们最终只有两个列表,一个在捕捉时显示,另一个在不捕捉时显示,但请注意,这些是具有静态数据源的列表。
  • 我解决了,谢谢大家:)

标签: javascript listview windows-8 winjs


【解决方案1】:

取自 here,只需监听 resize 事件并对列表视图的布局属性进行更改。

我不知道你在代码中的什么地方调用了类似的代码,所以这是你需要的整个方法

window.addEventListener("resize", function (e) { var currentViewState = Windows.UI.ViewManagement.ApplicationView.value; var snapped = Windows.UI.ViewManagement.ApplicationViewState.snapped; if (currentViewState === snapped) { that.listView.layout = new WinJS.UI.ListLayout(); } else if (lastViewState === snapped && currentViewState !== snapped) { that.listView.layout = new WinJS.UI.GridLayout(); } 上一个视图状态 = 当前视图状态; });

【讨论】:

    【解决方案2】:

    尝试调用 list.forceLayout() 它多次救了我的命... ;-)

    【讨论】:

    • forceLayout 仅适用于我认为数据可能发生变化的情况。对于静态数据,只需使用调整大小。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多