Xamarin формирует размер макета сетки постоянно уменьшается - PullRequest
0 голосов
/ 12 октября 2018

Мы сталкиваемся с проблемами в сетке Xamarin, размеры определяются в методе OnAppearing.каждый раз, когда мы вызываем метод OnAppearing, размер сетки непрерывно уменьшается, не получая точную проблему

, вот код

  gridLayout.RowDefinitions.Add(new RowDefinition(){
            Height = new GridLength(5, GridUnitType.Star),
        });
        gridLayout.RowDefinitions.Add(new RowDefinition(){
            Height = new GridLength(5, GridUnitType.Star),
        });
        gridLayout.ColumnDefinitions.Add(new ColumnDefinition()
        {
            Width = new GridLength(2, GridUnitType.Star),
        });
        gridLayout.ColumnDefinitions.Add(new ColumnDefinition(){
            Width = new GridLength(2, GridUnitType.Star),
        });
        gridLayout.ColumnDefinitions.Add(new ColumnDefinition(){
            Width = new GridLength(2, GridUnitType.Star),
        });
        gridLayout.ColumnDefinitions.Add(new ColumnDefinition(){
            Width = new GridLength(2, GridUnitType.Star),
        });
        gridLayout.ColumnDefinitions.Add(new ColumnDefinition(){
            Width = new GridLength(2, GridUnitType.Star),
        });


        var productIndex = 0;
        for (int rowIndex = 0; rowIndex < 2; rowIndex++)
        {
            for (int columnIndex = 0; columnIndex < 5; columnIndex++)
            {
                if (productIndex >= CategoryArray.Count)
                {
                    break;
                }
                var category = CategoryArray[productIndex];
                productIndex += 1;
                var categoriesView = new CategoriesView
                {
                    BackgroundColor = Color.White
                };

                if(category.Image == null){
                    categoriesView.CategoriesImage.Source = "category_logo";
                }else{
                    categoriesView.CategoriesImage.Source = category.Image;
                }

                //categoriesView.BackgroundColor = Color.Olive;
                categoriesView.TextLabel.Text = category.Name;
                categoriesView.CategoryId = category.Id.ToString();
                gridLayout.Children.Add(categoriesView, columnIndex, rowIndex);

                //gridLayout.BackgroundColor = Color.Beige;
            }
        }

, когда когда-либо OnAppearing вызывает, страница перезагружается (это особенность) и размер сетки постоянно уменьшается.

1 Ответ

0 голосов
/ 14 октября 2018

Вы должны объявить структуру Grid только один раз, в идеале в конструкторе (или в XAML, который вызывается в конструкторе).Всякий раз, когда вызывается OnAppearing, вы добавляете 2 новые строки и 5 новых столбцов в существующую таблицу, поэтому ее размер уменьшается.

Кроме того, просматривая написанную вами логику добавления элементов, вы, вероятно, должны использовать ListView с Grid ViewCell и установить для ItemsSource значение ObservableCollection, чтобы он автоматически обновлялся

...