Xamarin 形成网格不呈现行/列

我有一个网格,我在其中添加了 moreTileView。但它只是在第一行和第一列呈现(相互重叠)。我想要的是在新行和/或新列中呈现每个新的“图块”。也许这不是最好的方法。如果你们有一个击球手想法如何实现我想要做的事情,请告诉我。


MoreTilePage.xaml


<ContentPage.Content>

    <ScrollView>

        <StackLayout  x:Name="MoreTileViewHolder" />

    <ScrollView>

</ContentPage.Content>

MoreTilePage.xaml.cs


public partial class MoreTilePage : ContentPage

{

    public MoreTilePage()

    {

        InitializeComponent();


        var items = PixelApp.Platform.AppContext.Instance.moreViewModel?.Items;


        Grid myGrid = new Grid();


        myGrid.HorizontalOptions = LayoutOptions.FillAndExpand;

        myGrid.Padding = new Thickness(10);


        myGrid.RowDefinitions = new RowDefinitionCollection

        {

            new RowDefinition { Height = new GridLength(220) },

            new RowDefinition { Height = new GridLength(220) },

            new RowDefinition { Height = new GridLength(220) },

            new RowDefinition { Height = new GridLength(220) },

            new RowDefinition { Height = new GridLength(220) }

        };


        myGrid.ColumnDefinitions = new ColumnDefinitionCollection

        {

            new ColumnDefinition { Width = GridLength.Star },

            new ColumnDefinition { Width = GridLength.Star }

        };



        int iColumn = 0;

        int iRow = 0;

        int iItem = 1;



        foreach (MoreModel model in items)

        {

            if (iItem > 2)

            {

                iItem = 1;

                iRow++;

            }


            model.row = iRow;

            model.column = iColumn;


            var tile = new MoreTileView(model);

            myGrid.Children.Add(tile);


            iItem++;


            if (iColumn == 0)

                iColumn = 1;

            else

                iColumn = 0;

        }


        MoreTileViewHolder.Children.Add(myGrid);

    }

}

这是执行时的输出

http://img2.mukewang.com/61e292e800012c4207291295.jpg

然而,这就是我想要的样子

http://img2.mukewang.com/61e292f40001803107281296.jpg


长风秋雁
浏览 184回答 2
2回答

元芳怎么了

噗……缺陷多多。1.为什么要把grid放在stacklayout中作为唯一的孩子?只需将网格直接放入滚动视图即可。MoreTileViewHolder.Children.Add(myGrid);因此是无用的。只需替换<StackLayout &nbsp;x:Name="MoreTileViewHolder" />为`。2.您将所有“平铺”对象添加到网格的第 0 列和第 0 行myGrid.Children.Add(tile)。添加时必须指定行和网格,否则它们最终会在同一个位置。&nbsp;myGrid.Children.Add(tile, iColumn, iRow)看起来这就是你想要的。我知道您正在尝试使用 Grid.Column 和 Grid.Row-Properties 上的绑定来执行此操作。但我想这并没有更新视图。我的猜测是这些属性是在错误的时间点更改的,因此将其添加到 Grid 不会产生影响。尽管如此,您必须向我们展示您的“MoreModel”课程。它也可能是,你没有使用正确BindableProperties,所以Grid.Column="{Binding column}"就Frame只是从来没有真的发生。3.不要重新发明轮子。最新的 xamarin 版本包括“FlexLayout”,我相信它可以满足您在此处创建的意图。Xamarin FlexLayout

杨__羊羊

我不明白“2。您将所有“平铺”对象添加到网格 myGrid.Children.Add(tile) 的第 0 列和第 0 行。”,怎么会?我正在遍历所有项目和设置:model.row&nbsp;=&nbsp;iRow; model.column&nbsp;=&nbsp;iColumn;并且绑定也应该是正确的,因为我正确地获得了标签中的标题。
打开App,查看更多内容
随时随地看视频慕课网APP