问题描述
我有这段代码,我想将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%减去。
您可以在此处查看其他示例:
- https://docs.microsoft.com/en-us/windows/uwp/design/layout/grid-tutorial
- https://docs.microsoft.com/en-us/xamarin/get-started/tutorials/grid/?tabs=vswin
您定义两列,一列的宽度值为50
,另一列的默认属性。具有默认属性的是<ColumnDefinition />
。
查看 Xamarin 101 系列以了解以下内容:
https://www.youtube.com/playlist?list=PLdo4fOcmZ0oU10SXt2W58pu2L0v2dOW-1
这是Microsoft的官方系列文章,也是学习Xamarin的最基本切入点。