我是否需要为Xamarin中的简单两列网格指定Grid.ColumnDefinitions?

时间:2017-07-28 07:15:59

标签: xamarin xamarin.forms

我有这段代码:

<ViewCell x:Name="ss">
   <Grid VerticalOptions="CenterAndExpand" Padding="20, 0">
      <Grid.ColumnDefinitions>
         <ColumnDefinition Width="*" />
         <ColumnDefinition Width="Auto" />
      </Grid.ColumnDefinitions>
      <local:LabelBodyRendererClass Grid.Column="0" HorizontalOptions="StartAndExpand" Text="Show Subcategory" />
      <Switch x:Name="ssSwitch" Grid.Column="1" Toggled="SsSwitch" VerticalOptions="Center" HorizontalOptions="End" />
   </Grid>
</ViewCell>

我发现删除列定义时它仍能正常工作:

<ViewCell x:Name="ss">
   <Grid VerticalOptions="CenterAndExpand" Padding="20, 0">
      <local:LabelBodyRendererClass Grid.Column="0" HorizontalOptions="StartAndExpand" Text="Show Subcategory" />
      <Switch x:Name="ssSwitch" Grid.Column="1" Toggled="SsSwitch" VerticalOptions="Center" HorizontalOptions="End" />
   </Grid>
</ViewCell>

因此,对于像这样的简单案例,他们需要。到目前为止,我只能在iOS模拟器中看到。我不确定它何时部署。

2 个答案:

答案 0 :(得分:2)

据我所知,如果你想要多个列或行,你需要定义它们。我在文档中找不到任何其他内容。即使Xamarin.Forms会自动为您生成列(或行),它也将始终具有默认的宽度或高度设置,即Auto。如果您想对它们的布局方式有任何控制,您必须自己添加定义并指定宽度和高度。

您可以自己轻松测试,就像您说过的那样。如果您想确定,请创建一些场景,尝试在不定义列的情况下展开列或行。

答案 1 :(得分:1)

只有在每列需要特定值时才需要指定ColumnDefinition。否则,每列将平均分配行的宽度。