2

HTML5 / CSS/JSを使用してWindows8用のメトロスタイルのアプリケーションを開発しています

グループ化されたリストビューに異なるサイズのアイテムを表示しようとしています。(すべてのメトロスタイルアプリと同じように...)インターネット上で、GridLayoutをリストビューに配置してgroupInfoを実装する必要があることがわかりました。最初のアイテムの変更に成功します(最初のアイテム内の画像は他のアイテムよりも大きくなります)が、すべてのアイテムは最初のアイテムのサイズになります。代わりにこのようなものが欲しいです: 例

これが私がしたことです:

updateLayout: function (element, viewState, lastViewState) {

        //I get my listView winControl defined in HTML
        var listView = element.querySelector(".blocksList").winControl;

        var globalList = new WinJS.Binding.List(globalArray);
        var groupDataSource = globalList.createGrouped(this.groupKeySelector,
                    this.groupDataSelector, this.groupCompare);

       // I set the options of my listView (the source for the items and the groups +  the grid Layout )
        ui.setOptions(listView, {
            itemDataSource: groupDataSource.dataSource,
            groupDataSource: groupDataSource.groups.dataSource,
            layout: new ui.GridLayout({
                groupHeaderPosition: "top",
                groupInfo: function () {
                    return {
                        multiSize: true,
                        slotWidth: Math.round(480),
                        slotHeight: Math.round(680)
                    };
                }
            }),
            itemTemplate: this.itemRenderer,
             });
    },

    // je définis le template pour mes items
    itemRenderer: function (itemPromise) {
        return itemPromise.then(function (currentItem, recycled) {
            var template = document.querySelector(".itemTemplate").winControl.renderItem(itemPromise, recycled);
            template.renderComplete = template.renderComplete.then(function (elem) {

                //if it is the first item I put it widder
                if (currentItem.data.index == 0) {
                  //  elem.querySelector(".item-container").style.width = (480) + "px";
                    elem.style.width = (2*480) + "px";

                }

              });
            return template.element;
        })
    },

html部分は:

      <section aria-label="Main content" role="main">
      <div class="blocksList" aria-label="List of blocks" data-win-control="WinJS.UI.ListView"
data-win-options="{itemTemplate:select('.itemTemplate'), groupHeaderTemplate:select('.headerTemplate')
                   , selectionMode:'none', swipeBehavior:'none', tapBehavior:'invoke'}">
       </div>
       </section> 


            <!--Templates-->
<div class="headerTemplate" data-win-control="WinJS.Binding.Template">
    <div class="header-title" data-win-bind="innerText: categorieName"/>
</div>

<div class="itemTemplate" data-win-control="WinJS.Binding.Template">
            <div class="item-container" >
                 <div class="item-image-container">
                   <img class="item-image" data-win-bind="src: urlImage" src="#" />
                 </div>
            <div class="item-overlay">
                 <h4 class="item-title" data-win-bind="textContent: title"></h4>
            </div>
         </div>
</div>

et le css

   .newHomePage p {
margin-left: 120px;
 }

 .newHomePage .blocksList {
      -ms-grid-row: 2;
  }

      .newHomePage .blocksList .win-horizontal.win-viewport .win-surface {
         margin-left: 120px;
         margin-bottom: 60px;
     }

    .newHomePage .blocksList .item-container {
    height: 340px;
    width: 240px;
    color: white;
    background-color: red;
    -ms-grid-columns: 1fr;
    -ms-grid-rows: 1fr;
    display: -ms-grid;
    }


    .newHomePage .blocksList .win-item {
       /*-ms-grid-columns: 1fr;
      -ms-grid-rows: 1fr 30px;
      display: -ms-grid;*/
       height: 130px;
      width: 240px;
      background: white;
      outline: rgba(0, 0, 0, 0.8) solid 2px;
     }

ご協力ありがとうございました。

4

1 に答える 1

1

リリースプレビュー(およびRTM)で、groupInfo関数のプロパティ名が変更されました。

  • multiSize-> enableCellSpanning
  • slotWidth-> cellWidth
  • slotHeight-> cellHeight

それを試して、より良い結果が得られるかどうかを確認してください。この方法でセルスパンをアナウンスしない場合、GridLayoutは最初のアイテムのサイズをすべてのアイテムのサイズと同じにします。

Microsoft Pressの私の電子ブックの第5章(RTMプレビューは近日公開予定)で、この詳細をすべてカバーします。

.Kraig

于 2012-08-10T15:13:22.977 に答える