Xamarin 表单:在网格内使用相对约束,但不使用相对布局?
是否可以使用引用内部其他视图的约束,而不将它们包含在相对布局中 换句话说,有没有办法做到这一点:Xamarin 表单:在网格内使用相对约束,但不使用相对布局?,xamarin,xamarin.forms,constraints,Xamarin,Xamarin.forms,Constraints,是否可以使用引用内部其他视图的约束,而不将它们包含在相对布局中 换句话说,有没有办法做到这一点: <ContentPage .... > <Grid> <Grid.RowDefinitions> <RowDefinition RelativeLayout.HeightConstraint="{ConstraintExpression Type=RelativeToParent,
<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>
…请注意,这是一个网格,它不在相对布局内,而是使用RelativeLayout约束。这是可能的,还是类似的?不,据我所知,您不能对网格行或列应用
RelativeLayout
约束
但是有一种非常简单的方法可以达到想要的效果:使用GridLength.Star
。具有*
高度的所有行(列的保留值相同)将具有相同的高度。无论如何,高度2*
的行将是高度*
的行的两倍
要声明高度为整个网格的1/10
的行,只需使用以下行定义
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="9*" />
</Grid.RowDefinitions>
这样,栅格的宽度和高度将绑定到相同的属性
,这将使栅格
为二次型。在网格中
可以使用启动系统设置相对于网格的列和行。由于网格的宽度和高度相等,因此*
行的高度将等于*
列的宽度。这有用吗
请注意:根据您的总体布局
RelativeLayout
可能会非常慢。)保罗,谢谢你的回答。我知道恒星系统,但是如果你仔细看我的例子,你会发现它所做的不能与恒星系统复制。在本例中,列和行都是相对于父视图的同一个参数(即宽度)定义自己的。使用星形系统,列根据父项的宽度设置其宽度,行根据父项的高度设置其高度。但是,您可以使用相对布局约束,根据同一个参数(即父项的高度)设置这两个约束。@Lemotjuice,算了吧。我重新介绍了RelativeLayout
,它似乎不适合您。保留我的编辑,以防对其他人有用。我喜欢你的解决方案和编辑,也许这将是我唯一的选择。我对相对布局的阻力是文档本身的警告,说明它如何降低速度。我有一个非常复杂的网格布局,在它后面放置一个相对的布局,我认为,会迫使每一列和每一行都受到这种缓慢的影响。我想,另一个选择是隐藏在代码中的东西。无论如何,我认为你可能是对的。如果你添加了一个帖子脚本,人们可能希望避免相对布局,因为它会减慢速度,我会给你这个答案。太好了,谢谢你的全面回复,包括示例。你到底想实现什么?也许从这一方面来解决这个问题会更好。我遇到了很多这样的问题,但当前的问题是试图确保网格布局中的某个单元格是正方形。
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="9*" />
</Grid.ColumnDefinitions>
<RelativeLayout>
<Grid RelativeLayout.WidthConstraint="{ConstraintExpression, Type=RelativeToParent, Property=Width}"
RelativeLayout.HeightConstraint="{ConstraintExpression, Type=RelativeToParent, Property=Width}">
<!-- Elided -->
</Grid>
</RelativeLayout>