@LaFable

Почему не работает вынесение стилей в общую переменную при работе с гридом?

Добрый день!
Решил позаниматься Xamarin и возник такой вопрос.
На текст внутри ячеек можно не смотреть, там генерируются случайные значения. Интересует border, который я создаю для ячейки (при помощи накладывания BoxView)
Создаю Grid.

Вот в таком виде все работает:
Grid grid = new Grid
		    {
		        RowDefinitions =
		        {
		            new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }
		        },
		        ColumnDefinitions =
		        {
		            new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }		            
		        }
		    };

	    grid.BackgroundColor = Color.White;
		    
            grid.Children.Add(new BoxView { Color = Color.Gray },  0, 0);
	    grid.Children.Add(new BoxView { Color = Color.White, Margin = 1 }, 0, 0);
            grid.Children.Add(Label(ListNationalTeams()[0]), 0, 0);

	    grid.Children.Add(new BoxView { Color = Color.Gray }, 0, 1);
	    grid.Children.Add(new BoxView { Color = Color.White, Margin = 1 }, 0, 1);
            grid.Children.Add(Label(ListNationalTeams()[1]), 0, 1);

	    grid.Children.Add(new BoxView { Color = Color.Gray }, 0, 2);
	    grid.Children.Add(new BoxView { Color = Color.White, Margin = 1 }, 0, 2);
            grid.Children.Add(Label(ListNationalTeams()[2]), 0, 2);

	    grid.Children.Add(new BoxView { Color = Color.Gray }, 0, 3);
	    grid.Children.Add(new BoxView { Color = Color.White, Margin = 1 }, 0, 3);
            grid.Children.Add(Label(ListNationalTeams()[3]), 0, 3);

	    grid.Children.Add(new BoxView { Color = Color.Gray }, 0, 4);
	    grid.Children.Add(new BoxView { Color = Color.White, Margin = 1 }, 0, 4);
            grid.Children.Add(Label(ListNationalTeams()[4]), 0, 4);

	    grid.Children.Add(new BoxView { Color = Color.Gray }, 0, 5);
	    grid.Children.Add(new BoxView { Color = Color.White, Margin = 1 }, 0, 5);
            grid.Children.Add(Label(ListNationalTeams()[5]), 0, 5);

	    grid.Children.Add(new BoxView { Color = Color.Gray }, 0, 6);
	    grid.Children.Add(new BoxView { Color = Color.White, Margin = 1 }, 0, 6);
            grid.Children.Add(Label(ListNationalTeams()[6]), 0, 6);

	    grid.Children.Add(new BoxView { Color = Color.Gray }, 0, 7);
	    grid.Children.Add(new BoxView { Color = Color.White, Margin = 1 }, 0, 7);
            grid.Children.Add(Label(ListNationalTeams()[7]), 0, 7);


Результат:
5d6fbd6d989cf160274621.png

А если я пытаюсь вынести стили в общие, то результат получается печальный.
Ниже код с вынесенным стилем и результат:

Grid grid = new Grid
		    {
		        RowDefinitions =
		        {
		            new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }	         
		        },
		        ColumnDefinitions =
		        {
		            new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }		            
		        }
		    };

		    grid.BackgroundColor = Color.White;

		    var grayBox = new BoxView {Color = Color.Gray};
		    var whiteBox = new BoxView {Color = Color.White, Margin = 1};

            grid.Children.Add(grayBox,  0, 0);
	    grid.Children.Add(whiteBox, 0, 0);
            grid.Children.Add(Label(ListNationalTeams()[0]), 0, 0);

	    grid.Children.Add(grayBox, 0, 1);
	    grid.Children.Add(whiteBox, 0, 1);
            grid.Children.Add(Label(ListNationalTeams()[1]), 0, 1);

	    grid.Children.Add(grayBox, 0, 2);
	    grid.Children.Add(whiteBox, 0, 2);
            grid.Children.Add(Label(ListNationalTeams()[2]), 0, 2);

	    grid.Children.Add(grayBox, 0, 3);
	    grid.Children.Add(whiteBox, 0, 3);
            grid.Children.Add(Label(ListNationalTeams()[3]), 0, 3);

	    grid.Children.Add(grayBox, 0, 4);
	    grid.Children.Add(whiteBox, 0, 4);
            grid.Children.Add(Label(ListNationalTeams()[4]), 0, 4);

	    grid.Children.Add(grayBox, 0, 5);
	    grid.Children.Add(whiteBox, 0, 5);
            grid.Children.Add(Label(ListNationalTeams()[5]), 0, 5);

	    grid.Children.Add(grayBox, 0, 6);
	    grid.Children.Add(whiteBox, 0, 6);
            grid.Children.Add(Label(ListNationalTeams()[6]), 0, 6);

	    grid.Children.Add(grayBox, 0, 7);
	    grid.Children.Add(whiteBox, 0, 7);
            grid.Children.Add(Label(ListNationalTeams()[7]), 0, 7);


5d6fbdbfe10d1763063271.png

Почему так происходит? И есть ли возможность создать общую переменную?
  • Вопрос задан
  • 29 просмотров
Решения вопроса 1
@SZolotov
Asp.net core, MAUI,WPF,Qt, Avalonia
Вы немного не то делаете.
1. В вашем случае вместо grid нужно использовать listview
2. Используйте вёрстку в xaml
3. Вместо ручного присваивания значений в UI делайте биндинг
4. Вместо вёрстки "кодом" для ячеек используйте Data Template, почитайте что такое стили в Xamarin forms

А в ответ на ваш вопрос
Почему так происходит?

могу посоветовать посмотреть в исходники Xamarin Forms
И есть ли возможность создать общую переменную?

Изучите xaml, стили, темплейты.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
28 мар. 2024, в 12:05
2000 руб./за проект
28 мар. 2024, в 11:24
5000 руб./за проект