1. ホーム
  2. wpf

[解決済み] XAML ColumnDefinitionの*(アスタリスク)の意味は?

2022-08-24 20:11:46

質問

以下の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 グリッドで列を定義するとき、3 つの可能な値のいずれかに幅を設定することができます。

  • 固定幅。
  • Auto - カラムはその子カラムにフィットするために必要な幅になります。
  • * (星形) 残りの利用可能なスペースを占有する

* には数字が前置される(数字が指定されない場合のデフォルトは1)。利用可能なスペースは、接頭辞の番号に比例して星印の列に分割される。

もし、この定義が

<Grid.ColumnDefinitions>
  <ColumnDefinition Width="0.07*"/>
  <ColumnDefinition Width="0.93*"/>
</Grid.ColumnDefinitions>

最初の列は利用可能な総スペースの7%を取得し、2番目の列は93%を取得することになります。一方、このような定義があった場合。

<Grid.ColumnDefinitions>
  <ColumnDefinition Width="0.07*"/>
  <ColumnDefinition Width="0.14*"/>
</Grid.ColumnDefinitions>

最初の列は利用可能なスペースの1/3、2番目の列は2/3を取得することになります。


グリッドの幅が 354 で、2 つの列の比率が 40 と 314 である特定のケースでは、次の列幅が得られます。

最初の列の幅 = 40/(40 + 314)*354 = 40
二番目の列の幅 = 314/(40 + 314)*354 = 314

スター幅は、グリッドの幅が固定でない場合に使用するのが最適です。グリッドのサイズが変更されると、列は星の幅で指定されたとおりに比例して拡大縮小します。あなたのケースでは、グリッドの幅は固定されており、固定幅の列を簡単に使用することができました。

もし、2番目の列が最初の列の2倍の幅で、3番目の列が最初の列の3倍の幅であるレイアウトを望むなら、この定義が必要です。

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

グリッドの総幅が300の場合、列の幅は50、100、150となります。グリッドの合計幅が600であれば、列の幅は100、200、300になります。といった具合です。