WPF ColumnDefinition中*(星号)的含义?

Sha*_*ank 101 wpf grid layout xaml

下面的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>
Run Code Online (Sandbox Code Playgroud)

Mar*_*age 158

在WPF网格中定义列时,可以将宽度设置为三个可能值之一:

  • 固定宽度,
  • Auto - 列将变得适合其孩子所需的宽度,或
  • * (星级)占用任何可用的剩余空间

*由多个前缀(如果没有指定数目默认值为1).可用空间按照前缀编号的比例划分为已加星标的列.

如果你有这个定义

<Grid.ColumnDefinitions>
  <ColumnDefinition Width="0.07*"/>
  <ColumnDefinition Width="0.93*"/>
</Grid.ColumnDefinitions>
Run Code Online (Sandbox Code Playgroud)

第一列将获得可用总空间的7%,第二列将获得93%.另一方面,如果你有这个定义:

<Grid.ColumnDefinitions>
  <ColumnDefinition Width="0.07*"/>
  <ColumnDefinition Width="0.14*"/>
</Grid.ColumnDefinitions>
Run Code Online (Sandbox Code Playgroud)

第一列将获得1/3,第二列将获得可用空间的2/3.


在特定情况下,网格的宽度为354,两列的比例为40和314,您将获得以下列宽:

First column width = 40/(40 + 314)*354 = 40
Second coulmn width = 314/(40 + 314)*354 = 314

当网格的宽度不固定时,最好使用星形宽度.调整网格大小后,列将按照星形宽度的指定按比例缩放.在您的情况下,网格的宽度是固定的,您可以很容易地使用固定宽度列.

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

<Grid.ColumnDefinitions>
  <ColumnDefinition Width="*"/>
  <ColumnDefinition Width="2*"/>
  <ColumnDefinition Width="3*"/>
</Grid.ColumnDefinitions>
Run Code Online (Sandbox Code Playgroud)

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