Нет, насколько я знаю, вы не можете применить ограничения RelativeLayout
к строкам или столбцам сетки.
Но есть довольно простой способ добиться желаемого эффекта: используйте GridLength.Star
. Все строки (одинаковые для столбцов), имеющие *
высоту, будут иметь одинаковую высоту. В любом случае, строка с высотой 2*
будет в два раза выше строки с высотой *
.
Чтобы объявить строку, которая имеет высоту 1/10
всей сетки, просто используйте следующие определения строк
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="9*" />
</Grid.RowDefinitions>
и эквивалентно для столбцов
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="9*" />
</Grid.ColumnDefinitions>
Вы используете 9*
, а не 10*
, поскольку *
от первого ряда (столбца) и оставшихся 9*
сумм до 10*
, что составляет *
1/10
.
Редактировать
Поскольку я упустил центральную точку, что Width
и Height
должны быть связаны с тем же свойством того же родительского объекта, позвольте мне расширить мой ответ.
Конечно, вы можете встроить Grid
в RelativeLayout
:
<RelativeLayout>
<Grid RelativeLayout.WidthConstraint="{ConstraintExpression, Type=RelativeToParent, Property=Width}"
RelativeLayout.HeightConstraint="{ConstraintExpression, Type=RelativeToParent, Property=Width}">
<!-- Elided -->
</Grid>
</RelativeLayout>
Таким образом, Grids width and height are bound to the same property
, который сделает Grid
квадратичным. В Grid
вы можете использовать стартовую систему для установки столбцов и строк относительно сетки. Поскольку ширина и высота сетки равны, строка *
будет иметь высоту, равную ширине столбцов *
. Это помогает?
Обратите внимание: В зависимости от вашего общего макета RelativeLayout
может быть довольно медленным. ( см. Здесь ).