XAML ColumnDefinition 中的 *(星号)是啥意思?
Posted
技术标签:
【中文标题】XAML ColumnDefinition 中的 *(星号)是啥意思?【英文标题】:What's the meaning of * (asterisk) in XAML ColumnDefinition?XAML ColumnDefinition 中的 *(星号)是什么意思? 【发布时间】:2011-10-20 20:57:31 【问题描述】:下面XAML中*(星号)是什么意思?
<ColumnDefinition Width="0.07*"/>
<Grid Height="100" HorizontalAlignment="Left"
Margin="102,134,0,0"
Name="grid1" VerticalAlignment="Top"
Width="354">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="40*" />
<ColumnDefinition Width="314*" />
</Grid.ColumnDefinitions>
</Grid>
【问题讨论】:
如果我的第二列宽度是第一列的两倍,第三列宽度是第一列的三倍,那么我该如何使用 Astrik 【参考方案1】:在 WPF 网格中定义列时,可以将宽度设置为三个可能值之一:
固定宽度,Auto
– 列将变得尽可能宽以适合其子项,或者
*
(星号)占用任何可用的剩余空间
*
以数字为前缀(如果未指定数字,则默认为 1)。可用空间按前缀编号按比例在星号列之间分配。
如果你有这个定义
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.07*"/>
<ColumnDefinition Width="0.93*"/>
</Grid.ColumnDefinitions>
第一列将获得总可用空间的 7%,第二列将获得 93%。另一方面,如果你有这个定义:
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.07*"/>
<ColumnDefinition Width="0.14*"/>
</Grid.ColumnDefinitions>
第一列将获得可用空间的 1/3,第二列将获得可用空间的 2/3。
在您的特定情况下,网格的宽度为 354,两列的比例为 40 和 314,您会得到以下列宽度:
第一列宽度 = 40/(40 + 314)*354 = 40 第二列宽 = 314/(40 + 314)*354 = 314当网格的宽度不固定时,最好使用星形宽度。当网格调整大小时,列将按照星宽指定的比例缩放。在您的情况下,网格的宽度是固定的,您可以轻松地使用固定宽度的列。
如果你想要一个布局,其中第二列的宽度是第一列的两倍,第三列的宽度是第一列的三倍,你需要这个定义:
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="3*"/>
</Grid.ColumnDefinitions>
如果网格的总宽度为 300,则列宽为 50、100 和 150。如果网格的总宽度为 600,则列宽为 100、200 和 300。以此类推。
【讨论】:
【参考方案2】:[..] 一个值,表示为可用空间的加权比例。
【讨论】:
【参考方案3】:它使用比率创建列大小。如果您有另一个定义,例如 <ColumnDefinition Width="0.03*"/>
,第一列将占用 70% 的空间,第二列将占用 30%。
【讨论】:
唯一有效的答案..秘密在数字后面的*中。非常感谢。【参考方案4】:它与任何其他星宽列的比率为 0.07 - 即,如果另一个 ColomnDefinition 的宽度为 0.14,则该列是宽度的两倍 = 其全部与口粮有关
【讨论】:
以上是关于XAML ColumnDefinition 中的 *(星号)是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
Xaml技术:浅谈Grid.ColumnDefinitions和Grid.RowDefinitions属性
是否可以在 XAML (Xamarin.Forms) 中混合 OnIdiom 和 OnPlatform?
样式中的WPF设置ColumnDefinition.Width不起作用?