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>