*(星号)在WPF ColumnDefinition中的含义? (可用空间的加权比例)

*(星号)在下面的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> 

在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

当网格的宽度不固定时,最好使用星型宽度。 当网格resize后,列将按照星形宽度的比例按比例缩放。 在你的情况下,网格的宽度是固定的,你可以很容易地使用固定宽度的列。

如果你想要一个布局,第二列的宽度是第一列的三倍,第三列的宽度是第一列的宽度的三倍,你需要这个定义:

 <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="2*"/> <ColumnDefinition Width="3*"/> </Grid.ColumnDefinitions> 

如果网格的总宽度为300,则可以获得列宽50,100和150.如果网格的总宽度为600,则可以获得100,200和300的列宽。依此类推。

它的0.07的比例任何其他的星宽列 – 即如果另一个ColomnDefinition有0.14的宽度,那么这个列是宽度的两倍=它的所有关于口粮

[…]表示为可用空间的加权比例的值。

它使用比率创build列大小。 如果你有另一个像<ColumnDefinition Width="0.03*"/>的定义,第一列将占用70%的空间,第二列将占用30%。