为了账号安全,请及时绑定邮箱和手机立即绑定

Xamarin 形成网格不呈现行/列

Xamarin 形成网格不呈现行/列

C#
长风秋雁 2022-01-15 17:24:09
我有一个网格,我在其中添加了 moreTileView。但它只是在第一行和第一列呈现(相互重叠)。我想要的是在新行和/或新列中呈现每个新的“图块”。也许这不是最好的方法。如果你们有一个击球手想法如何实现我想要做的事情,请告诉我。MoreTilePage.xaml<ContentPage.Content>    <ScrollView>        <StackLayout  x:Name="MoreTileViewHolder" />    <ScrollView></ContentPage.Content>MoreTilePage.xaml.cspublic 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);    }}这是执行时的输出然而,这就是我想要的样子
查看完整描述

2 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

噗……缺陷多多。

1.为什么要把grid放在stacklayout中作为唯一的孩子?只需将网格直接放入滚动视图即可。MoreTileViewHolder.Children.Add(myGrid);因此是无用的。只需替换<StackLayout  x:Name="MoreTileViewHolder" />为`。

2.您将所有“平铺”对象添加到网格的第 0 列和第 0 行myGrid.Children.Add(tile)

添加时必须指定行和网格,否则它们最终会在同一个位置。 myGrid.Children.Add(tile, iColumn, iRow)看起来这就是你想要的。

我知道您正在尝试使用 Grid.Column 和 Grid.Row-Properties 上的绑定来执行此操作。但我想这并没有更新视图。我的猜测是这些属性是在错误的时间点更改的,因此将其添加到 Grid 不会产生影响。尽管如此,您必须向我们展示您的“MoreModel”课程。它也可能是,你没有使用正确BindableProperties,所以Grid.Column="{Binding column}"Frame只是从来没有真的发生。

3.不要重新发明轮子。最新的 xamarin 版本包括“FlexLayout”,我相信它可以满足您在此处创建的意图。Xamarin FlexLayout


查看完整回答
反对 回复 2022-01-15
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

我不明白“2。您将所有“平铺”对象添加到网格 myGrid.Children.Add(tile) 的第 0 列和第 0 行。”,怎么会?我正在遍历所有项目和设置:

model.row = iRow;
model.column = iColumn;

并且绑定也应该是正确的,因为我正确地获得了标签中的标题。


查看完整回答
反对 回复 2022-01-15
  • 2 回答
  • 0 关注
  • 183 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信