Xamarin Forms中的<ColumnDefinition />是什么,可以用值设置代替吗?

问题描述

我有这段代码,我想将ColumnDeFinition转换为使用新语法的第一行。

有人可以在这种情况下向我解释<ColumnDeFinition />的用途:

<Grid Margin="5,5,0" >

    <Grid.ColumnDeFinitions>
        <ColumnDeFinition />
        <ColumnDeFinition Width="50" />
    </Grid.ColumnDeFinitions>

    <Grid.GestureRecognizers>
        <TapGestureRecognizer Tapped="TitleTapped" />
    </Grid.GestureRecognizers>

    <t:FaqTemplate
        HorizontalOptions="Start"
        Text="{Binding Source={x:Reference _accordion_view_123},Path=Title}"
        VerticalOptions="CenterandExpand" />

    <ContentView
        x:Name="_indicatorContainer"
        Grid.Column="1"
        Content="{Binding Source={x:Reference _accordion_view_123},Path=IndicatorView}"
        HorizontalOptions="End"
        VerticalOptions="Start" />
</Grid>

解决方法

使用新语法,它将转换为:

<Grid ColumnDefinitions="*,50">

有关新语法的完整规范,您可以阅读以下内容:https://github.com/microsoft/microsoft-ui-xaml/issues/673

基本上,<ColumnDefinition />相当于<ColumnDefinition Width="*" />*Width属性的默认值)。

列的宽度可以用3种方式表示:

  • Auto表示该列将在可用空间内根据内容自动调整大小
  • 50这样的绝对值,在这种情况下,该列将是50个独立于密度的像素宽
  • *,实际上等效于1**允许您按比例划分可用空间。例如,如果您的A列为1*,B列为3*,则A列将占25%(4之1),B列将占75%(4之3)。

在您的特定情况下,第二列的固定值为50,因此,*50的第一列将占用剩余宽度的100%减去。

您可以在此处查看其他示例:

,

您定义两列,一列的宽度值为50,另一列的默认属性。具有默认属性的是<ColumnDefinition />

查看 Xamarin 101 系列以了解以下内容:

https://www.youtube.com/playlist?list=PLdo4fOcmZ0oU10SXt2W58pu2L0v2dOW-1

这是Microsoft的官方系列文章,也是学习Xamarin的最基本切入点。