Как включить границы в Grid в Xamarin.forms
Я создаю сетку в Xamarin.forms.
И я бы хотел добавить границы, такие как таблицы.
Я думал, что я могу добавить границу при определении строк и столбцов, но не удалось.
Может кто-нибудь мне помочь?
Это мой текущий код.
Grid grid = new Grid {
VerticalOptions = LayoutOptions.FillAndExpand,
RowDefinitions = {
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
new RowDefinition { Height = GridLength.Auto },
},
ColumnDefinitions = {
new ColumnDefinition { Width = new GridLength (1, GridUnitType.Star) },
new ColumnDefinition { Width = new GridLength (5, GridUnitType.Star) },
new ColumnDefinition { Width = new GridLength (1, GridUnitType.Star) },
}
};
Ответы
Ответ 1
Нет свойства Border
для GridView
, но:
Просто установите grid.BackgroundColor
на требуемое значение цвета границы, затем установите значение grid.ColumnSpacing
и grid.RowSpacing
на некоторое значение и убедитесь, что все элементы управления, которые вы добавляете в сетку, правильно настроены BackgroundColor
.
Ответ 2
Вот полный ответ (в XAML) без необходимости писать собственный рендерер или Effect.
Код немного подробный, но понятный, и результат похож на изображение
![введите описание изображения здесь]()
Вот код, чтобы поместить границы в вашу сетку (и чем больше у вас будет полный контроль над ними, как вы заметили, что в левой части нет синей линии)
<Grid BackgroundColor="White">
<Grid.RowDefinitions>
<RowDefinition Height="1"/>
<RowDefinition Height="15"/>
<RowDefinition Height="1"/>
<RowDefinition Height="15"/>
<RowDefinition Height="1"/>
<RowDefinition Height="15"/>
<RowDefinition Height="1"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="1" />
<ColumnDefinition Width="10" />
<ColumnDefinition Width="1" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="1" />
<ColumnDefinition Width="50" />
<ColumnDefinition Width="1" />
</Grid.ColumnDefinitions>
<BoxView Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="8" BackgroundColor="Red" HeightRequest="1" VerticalOptions="End" HorizontalOptions="FillAndExpand"/>
<!--Your stuff here!-->
<BoxView Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="8" BackgroundColor="Red" HeightRequest="1" VerticalOptions="End" HorizontalOptions="FillAndExpand"/>
<!--Your stuff here!-->
<BoxView Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="8" BackgroundColor="Red" HeightRequest="1" VerticalOptions="End" HorizontalOptions="FillAndExpand"/>
<!--Your stuff here!-->
<BoxView Grid.Row="6" Grid.Column="0" Grid.ColumnSpan="8" BackgroundColor="Red" HeightRequest="1" VerticalOptions="End" HorizontalOptions="FillAndExpand"/>
<!--Vertical lines and no "stuff"-->
<BoxView Grid.Column="1" Grid.Row="0" Grid.RowSpan="7" BackgroundColor="Blue" WidthRequest="1" VerticalOptions="FillAndExpand" HorizontalOptions="End"/>
<BoxView Grid.Column="3" Grid.Row="0" Grid.RowSpan="7" BackgroundColor="Blue" WidthRequest="1" VerticalOptions="FillAndExpand" HorizontalOptions="End"/>
<BoxView Grid.Column="5" Grid.Row="0" Grid.RowSpan="7" BackgroundColor="Blue" WidthRequest="1" VerticalOptions="FillAndExpand" HorizontalOptions="End"/>
<BoxView Grid.Column="7" Grid.Row="0" Grid.RowSpan="7" BackgroundColor="Blue" WidthRequest="1" VerticalOptions="FillAndExpand" HorizontalOptions="End"/>
</Grid>
Ответ 3
![введите описание изображения здесь]()
<Grid BackgroundColor="White" >
<BoxView BackgroundColor="Pink" />
<Grid BackgroundColor="White" Margin="5">
</Grid>
</Grid>
Ответ 4
Просто заметил, что мой пример похож на Sturla, но немного отличается, поэтому я оставлю его.
Код не супер хорош, но я сделал что-то подобное, добавив 1px BoxView
между каждым столбцом, а затем 1 поверх вашего Grid
и один в нижней части вашего Grid
, например:
<Grid VerticalOptions="FillAndExpand"
HorizontalOptions="FillAndExpand"
RowSpacing="0"
ColumnSpacing="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="1"/>
</Grid.RowDefinitions>
<BoxView BackgroundColor="Black"
HeightRequest="1"
HorizontalOptions="FillAndExpand"
Grid.Row="0"/>
<Grid VerticalOptions="Start"
ColumnSpacing="0"
Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="1"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Button Text="Button 1"/>
<BoxView BackgroundColor="Black"
WidthRequest="1"
VerticalOptions="FillAndExpand"
Grid.Column="1"/>
<Button Text="Button 1"
Grid.Column="2"/>
</Grid>
<BoxView BackgroundColor="Black"
HeightRequest="1"
HorizontalOptions="FillAndExpand"
Grid.Row="2"/>
</Grid>
* Edit: с момента написания этого, я изменил способ, которым я немного это делаю. Теперь, как и Даниэль Люберда, я просто установил Grid.BackgroundColor
в Color.Black
, а затем я могу удалить все BoxView
, и я закончил. Я делаю это, потому что я предполагаю, что гораздо лучше иметь несколько просмотров на экране, особенно если вы помещаете что-то вроде выше в ListView
.
Кроме того, поскольку многие мои страницы будут анимировать Button
при загрузке страницы (используя ScaleTo()
), я сначала устанавливаю Grid.BackgroundColor
в Color.Transparent
или Color.White
, а затем, как только анимация будет выполнена, Я меняю его на Color.Black
. До сих пор хорошо работает.
Ответ 5
Если вы хотите получить решение с более равными границами, чем Daniel Luberda anwser, вот что я использовал:
Создайте сетку, в которой вы хотите, чтобы элемент имел границы. Поместите интервал между colomns и rows равным 0. Для каждого элемента сетки создайте еще одну сетку с боковым представлением в ней и ваш взгляд поверх этого Boxview. Затем добавьте каждый BoxView для заполнения и расширения. Затем отрегулируйте прописку этих "под" -Grids, как вам хотелось бы. Каждый элемент вашей сетки будет разделен равным.
Это довольно тяжело.