是否可以使用约束中的其他视图而没有将它们包含在相对布局中?
换句话说,有没有办法做到这一点:
<ContentPage .... >
<Grid>
<Grid.RowDefinitions>
<RowDefinition
RelativeLayout.HeightConstraint="{ConstraintExpression
Type=RelativeToParent,
Property=Height,
Factor=0.1,
Constant=0}" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition
RelativeLayout.WidthConstraint="{ConstraintExpression
Type=RelativeToParent,
Property=Heigth,
Factor=0.1,
Constant=0}"/>
</Grid.ColumnDefinitions>
</Grid>
</ContentPage>
...请注意,这是相对布局内的网格 not ,但是使用了RelativeLayout约束。这有可能吗?
答案 0 :(得分:1)
不,据我所知,您不能将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
应该绑定到父级的 same 属性,所以让我扩大答案。
当然,您可以将 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
可能会很慢。 (see here)。