2013-04-25 3 views
0

Я пытаюсь изменить макет элемента управления ListView с «GridView» на «ListView», когда приложение получает щелчок. Конечно, он должен вернуться в «GridView» в любом другом состоянии. Я написал код, но он не работает, так что я удивляюсь, почему ...Переключение с GridView на ListView при подключении приложения Windows Store

Это код, который я написал:

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(); 
} 
+0

Является ли код, определенный в функции «updateLayout» в файле js страницы? Если это так, один из переданных параметров - viewState. Кроме того, казалось бы, вы могли бы обрабатывать это с помощью Media Queries, а просто мысль. –

+0

общий код, который инициализирует listview другими свойствами, такими как itemDataSource, groupDataSource, itemTemplate, groupHeaderTemplate и метод updateLayout. – Sushil

+0

FWIW: У нас были проблемы с тем, чтобы это работало, а не только с точки зрения стиля обработки обеих ситуаций - это сделало его очень запутанным. В некоторых случаях у нас было только два списка: один, который показывает, когда он щелкнул, и тот, который показывает, когда нет, помните, что это были списки со статическими источниками данных. – GotDibbs

ответ

2

Как взяты из here просто прослушивать событие изменения размера и внесите изменения в свойство макета listview.

Я не могу сказать Ein порога кода, которому вы звоните подобный код, так вот весь метод вам нужен

 
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(); 
    } 

    lastViewState = currentViewState; 
}); 

+0

Спасибо, это сработало! :) –

0

Попробуйте вызов list.forceLayout() это спасло мою жизнь много раз ... ;-)

+0

Спасибо, рад узнать :) –

+0

forceLayout только тогда, когда данные потенциально меняются, я считаю. Для статических данных просто используйте размер. –