Xamarin формирует сетку, не отображающую строку / столбцы

У меня есть сетка, в которую я добавляю еще TileView. но это просто рендеринг в первой строке и столбце (перекрывая друг друга). Я хочу, чтобы каждая новая «плитка» отображалась в новой строке и / или столбце. Может быть, это не лучший способ сделать это. Если вы, ребята, знаете, как добиться того, что я пытаюсь сделать, дайте мне знать.

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

Подробнее

<ContentView.Content>
    <Frame Grid.Column = "{Binding column}" Grid.Row = "{Binding row}" Margin = "0" HasShadow = "True" BackgroundColor = "LightGray" IsClippedToBounds = "True" CornerRadius = "10" Padding = "0">
        <Grid>
            <ffimageloading:CachedImage Source = "{Binding image}" Aspect = "AspectFill" />
            <ffimageloading:CachedImage Source = "https://www.fisher-price.com/resources/animations/Imaginext/meetcharacters/images/kids_bkg-grey-grad.png" Aspect = "Fill" />

            <BoxView HeightRequest = "3" BackgroundColor = "HotPink" VerticalOptions = "End" HorizontalOptions = "Start" WidthRequest = "70" Margin = "10,10,10,60" />
            <Label Text = "{Binding headline}" TextColor = "White" VerticalOptions = "End" Margin = "10,10,10,10" />
        </Grid>
    </Frame>
</ContentView.Content>

MoreModel.cs

public class MoreModel
{
    public int id { get; set; }
    public int appId { get; set; }
    public int sort { get; set; }
    public string headline { get; set; }
    public string description { get; set; }
    public string image { get; set; }
    public string link { get; set; }

    public int column { get; set; }
    public int row { get; set; }
}

Это то, что получается при выполнении

Однако вот как я хочу, чтобы это выглядело

Я установил красный цвет фона сетки и по-прежнему НИЧЕГО не вижу. Xamarin отстой

Paul McCarthy 14.10.2019 17:30
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
435
2

Ответы 2

Пух ... Есть много недостатков.

1. Зачем помещать сетку в стек как ее единственный дочерний элемент? Просто поместите сетку прямо в область прокрутки. Поэтому 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. Но я думаю, это не обновляет представление. Я предполагаю, что эти свойства изменены не в тот момент времени, поэтому добавление их в сетку не повлияет. Несмотря на это, вы должны показать нам свой класс «MoreModel». Также может быть, что вы неправильно используете BindableProperties, поэтому Grid.Column = "{Binding column}" на Frame просто никогда не возникает.

3. Не изобретайте велосипед. Последняя версия xamarin включает «FlexLayout», который, как мне кажется, выполняет то, что вы собираетесь здесь создать. Xamarin FlexLayout

Я не понимаю "2. Вы добавляете все свои объекты" плитки "в столбец 0 и строку 0 сетки myGrid.Children.Add (tile).", Почему? Я просматриваю все элементы и настройки: model.row = iRow; model.column = iColumn; и привязки также должны быть правильными, поскольку я правильно понимаю заголовок на этикетке.

naak2803 13.09.2018 10:11

Но текст заголовка относится к самой этикетке. Привязка Grid.Row относится к родительскому объекту (myGrid) и может быть установлена ​​слишком рано / слишком поздно, поэтому значения не применяются. Тем не менее, почему вы связываете эти ценности? Они у вас есть прямо здесь, когда вы добавляете представления в сетку.

Csharpest 13.09.2018 10:19

Я не понимаю "2. Вы добавляете все свои объекты" плитки "в столбец 0 и строку 0 сетки myGrid.Children.Add (tile).", Почему? Я перебираю все элементы и настройки:

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

и привязки также должны быть правильными, поскольку я правильно понимаю заголовок на этикетке.

Другие вопросы по теме