DataGrid コントロールのサイズ変更方法

DataGrid 自体でサイズをどのように変更するかを制御するために、さまざまなオプションを使用できます。 DataGrid、および DataGrid 内の個々の行と列は、その内容に合わせて自動的にサイズ変更するように設定することも、特定の値に設定することもできます。 既定では、DataGrid はその内容のサイズに合わせて拡大縮小します。

DataGrid のサイズ変更

自動サイズ変更を使用する場合の注意事項

既定では、DataGridHeight および Width プロパティは Double.NaN (XAML では "Auto") に設定され、DataGrid でその内容のサイズに合わせて調整されます。

CanvasStackPanel など、その子のサイズが制限されないコンテナー内に配置された場合、DataGrid はコンテナーの可視境界を超えて広がり、スクロールバーは表示されません。 この状況は、使いやすさとパフォーマンスの両方に影響します。

データ セットにバインドされているときに、DataGridHeight が制限されていない場合、バインドされたデータ セット内の各データ項目に対する行の追加が続行されます。 これにより、行が追加されるにつれて、アプリケーションの可視境界外に DataGrid が拡大する可能性があります。 この場合、DataGrid にはスクロールバーが表示されません。これは、その Height が新しい行に合わせて拡大し続けるためです。

DataGrid 内の行ごとにオブジェクトが作成されます。 大規模なデータ セットを操作し、DataGrid 自体で自動的にサイズ変更できるようにする場合に、多数のオブジェクトを作成すると、アプリケーションのパフォーマンスに影響する可能性があります。

大規模なデータ セットを操作するときにこれらの問題を回避するには、DataGridHeight を明示的に設定するか、Grid など、その Height を制限するコンテナーに配置することをお勧めします。 Height が制限されている場合、DataGrid では、その指定された Height 内に収まる行のみを作成し、新しいデータを表示するために必要に応じて、それらの行をリサイクルします。

DataGrid サイズの設定

DataGrid を指定された境界内で自動的にサイズ変更するように設定することも、DataGrid を特定のサイズに設定することもできます。 次の表には、DataGrid サイズを制御するために設定できるプロパティが示されています。

プロパティ 説明
Height DataGrid の特定の高さを設定します。
MaxHeight DataGrid の高さの上限を設定します。 DataGrid は、この高さに達するまで垂直方向に拡大します。
MinHeight DataGrid の高さの下限を設定します。 DataGrid は、この高さに達するまで垂直方向に縮小します。
Width DataGrid の特定の幅を設定します。
MaxWidth DataGrid の幅の上限を設定します。 DataGrid は、この幅に達するまで水平方向に拡大します。
MinWidth DataGrid の幅の下限を設定します。 DataGrid は、この幅に達するまで水平方向に縮小します。

行と行ヘッダーのサイズ変更

DataGrid 行

既定では、DataGrid 行の Height プロパティが Double.NaN (XAML では "Auto") に設定され、行の高さはその内容のサイズに合わせて拡張されます。 DataGrid 内のすべての行の高さは、DataGrid.RowHeight プロパティを設定することで指定できます。 ユーザーは行ヘッダーの区切り線をドラッグすることで、行の高さを変更できます。

DataGrid 行ヘッダー

行ヘッダーを表示するには、HeadersVisibility プロパティを DataGridHeadersVisibility.Row または DataGridHeadersVisibility.All に設定する必要があります。 行ヘッダーは既定で表示され、その内容に合わせて自動的にサイズ変更されます。 行ヘッダーには、DataGrid.RowHeaderWidth プロパティを設定することで特定の幅を指定できます。

列と列ヘッダーのサイズ変更

DataGrid 列

DataGrid では、DataGridLength および DataGridLengthUnitType 構造体の値を使用して、絶対または自動のサイズ変更モードを指定します。

次の表には、DataGridLengthUnitType 構造体で提供される値が示されています。

名前 説明
Auto 既定の自動サイズ変更モードでは、セルと列ヘッダーの両方の内容に基づいて、DataGrid 列のサイズが変更されます。
SizeToCells セルベースの自動サイズ変更モードでは、列ヘッダーを含まない列のセルの内容に基づいて、DataGrid 列のサイズが変更されます。
SizeToHeader ヘッダーベースの自動サイズ変更モードでは、列ヘッダーの内容のみに基づいて、DataGrid 列のサイズが変更されます。
Pixel ピクセルベースのサイズ変更モードでは、指定された数値に基づいて、DataGrid 列のサイズが変更されます。
Star スター サイズ指定モードは、使用可能な領域を重み付け比率で分散させるために使用されます。

XAML では、スター値は n* で表されます。ここで、n は数値を表します。 1* は * と同じです。 たとえば、DataGrid の 2 つの列の幅が * と 2* である場合、最初の列では使用可能な領域の 1 つの部分を受け取り、2 番目の列では使用可能な領域の 2 つの部分を受け取ります。

DataGridLengthConverter クラスを使用すると、数値または文字列値と DataGridLength 値の間でデータを変換できます。

既定では、DataGrid.ColumnWidth プロパティは SizeToHeader に設定され、DataGridColumn.Width プロパティは Auto に設定されます。サイズ変更モードが Auto または SizeToCells に設定されている場合、列は表示される最も幅の広い内容の幅に合わせて拡大します。 スクロール時に、現在の列のサイズより大きい内容がスクロールされて表示されると、これらのサイズ変更モードにより列が拡張されます。 内容がスクロールされて表示されなくなると、列は圧縮されません。

DataGrid 内の列は、指定された境界内でのみ自動的にサイズ変更されるように設定することも、列を特定のサイズに設定することもできます。 次の表に、列のサイズを制御するために設定できるプロパティを示します。

プロパティ 説明
DataGrid.MaxColumnWidth DataGrid 内のすべての列の上限を設定します。
DataGridColumn.MaxWidth 個々の列の上限を設定します。 DataGrid.MaxColumnWidth をオーバーライドします。
DataGrid.MinColumnWidth DataGrid 内のすべての列の下限を設定します。
DataGridColumn.MinWidth 個々の列の下限を設定します。 DataGrid.MinColumnWidth をオーバーライドします。
DataGrid.ColumnWidth DataGrid 内のすべての列に対して特定の幅を設定します。
DataGridColumn.Width 個々の列に対して特定の幅を設定します。 DataGrid.ColumnWidth をオーバーライドします。

DataGrid 列ヘッダー

既定では、DataGrid 列ヘッダーが表示されます。 列ヘッダーを非表示にするには、HeadersVisibility プロパティを DataGridHeadersVisibility.Row または DataGridHeadersVisibility.None に設定する必要があります。 既定では、列ヘッダーが表示されると、その内容に合わせて自動的にサイズが変更されます。 列ヘッダーには、DataGrid.ColumnHeaderHeight プロパティを設定することで、特定の高さを指定できます。

マウスによるサイズ変更

ユーザーは、行または列ヘッダー区分線をドラッグして、DataGrid の行と列のサイズを変更できます。 DataGrid では、行または列ヘッダー区分線をダブルクリックすることによる行と列の自動サイズ変更もサポートされます。 特定の列のサイズがユーザーに変更されないようにするには、個々の列に対して DataGridColumn.CanUserResize プロパティを false に設定します。 すべての列のサイズがユーザーに変更されないようにするには、DataGrid.CanUserResizeColumns プロパティを false に設定します。 すべての行のサイズがユーザーに変更されないようにするには、DataGrid.CanUserResizeRows プロパティを false に設定します。

関連項目