バージョン

xamGrid コントロールの代わりに xamDataGrid コントロールを使用してください。xamGrid は数年以内に廃止する予定のため、新しい機能の追加はありません。xamGrid のサポートおよび重要なバグ修正は廃止時まで提供されます。コードベースの xamDataGrid への移動に関する質問は、サポートまでお問い合わせください。

列幅設定の変更

始める前に

xamGrid コントロールの ColumnWidth プロパティを ColumnWidth オブジェクトのインスタンスと共に使用して、xamGrid ですべての列に適用される幅を変更できます。以下の表は、ColumnWidth オブジェクトの WidthType プロパティの列挙値を示します。

ColumnWidthType 説明

列の幅は列の最大ヘッダーまたは列のセルに変更されます。注: 大きいコンテンツをスクロールして表示するときに、列の幅が大きくなる場合があります。ただし、減少することはありません。

列の幅は列の最大ヘッダーまたは列のセルに変更されます。ただし、グリッドが初めてロードする時、またはユーザーがリサイズするために列ヘッダーの端をダブルクリックする時に限りこれが発生します。

列の幅は指定された値に基づいて変更します。

列の幅は列の最大セルに変更されます。注: 大きいコンテンツをスクロールして表示するときに、列の幅が大きくなる場合があります。ただし、減少することはありません。

列の幅は列ヘッダーに変更されます。

列の幅は xamGrid の残りスペースを埋めるために変更されます。複数の列に star 値が指定されている場合、残りの幅は列で均等に分割されます。他の列がスペースのほとんどを使っている場合、列の幅は 0 に設定します。xamGrid コントロールの幅が Infinity の場合、列は Auto ColumnWidthType 幅として動作します。

以下のリストは、xamGrid で列の幅を変更するための様々な手法を示します。

  • ColumnWidth オブジェクトのインスタンスを使用 - ColumnWidth オブジェクトのコンストラクターにパスされる数値に列幅プロパティを設定します。2 番目の引数が False の場合、列は指定された値に変更されます(最初の例を参照)。そうでない場合、列は Star ColumnWidthType ですべてのその他の列と比較してパーセント値に変更されます(2 番目の例を参照)。これは Microsoft Grid コントロールの Column Definition の幅設定と同様の効果があります。たとえば、xamGrid に対応する幅 (2*、1* および 3* ) の 列が 3 つあり、残りの幅が 600 の場合、これらの列は 200、100、300 の幅値を持つことになります。

XAML の場合:

<ig:XamGrid x:Name="xamGrid" ColumnWidth="40">
   <!-- ...-->
</ig:XamGrid>
<ig:XamGrid x:Name="xamGrid" ColumnWidth="2*"
   <!-- ...-->
</ig:XamGrid>

Visual Basic の場合:

xamGrid.ColumnWidth = New ColumnWidth(40, False)     ' または
xamGrid.ColumnWidth = New ColumnWidth(2, True)

C# の場合:

xamGrid.ColumnWidth = new ColumnWidth (40, false);   // または
xamGrid.ColumnWidth = new ColumnWidth (2, true);
  • 静的な InitialAuto 値の使用 - 列幅プロパティを InitialAuto ColumnWidth 値の静的インスタンスに設定します。この技術が使用される場合、すべての列は列の最大ヘッダーまたはセルに変更されます。ただし、グリッドが初めてロードする時、またはユーザーがリサイズするために列ヘッダーの端をダブルクリックする時に限りこれが発生します。

XAML の場合:

<ig:XamGrid x:Name="xamGrid" ColumnWidth="InitialAuto">
   <!-- ...-->
</ig:XamGrid>

Visual Basic の場合:

xamGrid.ColumnWidth = ColumnWidthType.InitialAuto

C# の場合:

xamGrid.ColumnWidth = ColumnWidthType.InitialAuto;
  • 静的な Auto 値の使用 - 列幅プロパティを Auto ColumnWidth 値の静的インスタンスに設定します。この技術が使用される場合、すべての列は列の最大ヘッダーまたはセルに変更されます。スクロールすると、大きいコンテンツが表示されるにしたがって列の幅が大きくなる場合があります。ただし、幅が小さくなることはありません。

XAML の場合:

<ig:XamGrid x:Name="xamGrid" ColumnWidth="Auto">
   <!-- ... -->
</ig:XamGrid>

Visual Basic の場合:

xamGrid.ColumnWidth = ColumnWidthType.Auto

C# の場合:

xamGrid.ColumnWidth = ColumnWidthType.Auto;
  • 静的な SizeToCells 値の使用 - 列幅プロパティを SizeToCells ColumnWidth 値の静的インスタンスに設定します。この技術が使用される場合、すべての列は列の最大セルに変更されます。スクロールすると、大きいコンテンツが表示されるにしたがって列の幅が大きくなる場合があります。ただし、幅が小さくなることはありません。

XAML の場合:

<ig:XamGrid x:Name="xamGrid" ColumnWidth="SizeToCells">
   <!-- ... -->
</ig:XamGrid>

Visual Basic の場合:

xamGrid.ColumnWidth = ColumnWidthType.SizeToCells

C# の場合:

xamGrid.ColumnWidth = ColumnWidthType.SizeToCells;
  • 静的な SizeToHeader 値の使用 - 列幅プロパティを SizeToHeader ColumnWidth 値の静的インスタンスに設定します。この技術が使用される場合、すべての列は列のヘッダーに変更されます。

XAML の場合:

<ig:XamGrid x:Name="xamGrid" ColumnWidth="SizeToHeader">
   <!-- ... -->
</ig:XamGrid>

Visual Basic の場合:

xamGrid.ColumnWidth = ColumnWidthType.SizeToHeader

C# の場合:

xamGrid.ColumnWidth = ColumnWidthType. SizeToHeader;
  • 静的な Star 値の使用 - 1 と True の値を ColumnWidth コンストラクターに渡すことに等しい Star ColumnWidth 値の静的インスタンスに列幅プロパティを設定します。この手法を使用する場合、すべての列は xamGrid の残りのスペースを埋めるために変更されます。複数の列に star 値が指定されている場合、残りの幅は列で均等に分割されます。他の列がスペースのほとんどを使っている場合、列の幅は 0 に設定します。xamGrid コントロールの幅が Infinity の場合、列は Auto ColumnWidthType 幅として動作します。

XAML の場合:

<ig:XamGrid x:Name="xamGrid" ColumnWidth="Star"
</ig:XamGrid>
   <!-- 同じ: -->
<ig:XamGrid x:Name="xamGrid" ColumnWidth="1*"
</ig:XamGrid>

Visual Basic の場合:

xamGrid.ColumnWidth = ColumnWidthType.Star         ' 同じ:
xamGrid.ColumnWidth = New ColumnWidth(1, True)

C# の場合:

xamGrid.ColumnWidth = ColumnWidthType.Star;        // 同じ:
xamGrid.ColumnWidth = new ColumnWidth (1, true);

達成すること

ランタイムに xamGrid ですべての列の幅を変更するユーザー コントロールを作成します。

xamGrid Change Column Width Settings 01.png

以下の手順を実行します。

以下のコードは、ColumnWidth オブジェクトを使用して、ランタイムに xamGrid コントロールの列幅を変更する方法を示します。

  1. ソリューション エクスプローラーで、以下の参照を WPF アプリケーション プロジェクトに追加します。

    1. InfragisticsWPF4.v20.1.dll

    2. InfragisticsWPF4.Controls.Grids.XamGrid.v20.1.dll

  2. MainPage.xaml ファイルで、以下の名前空間宣言を追加します。

Note

注: [DATA_MODEL_NAMESPACE] 文字列は、アセンブリ プロジェクトの名前で置き換える必要があります。

XAML の場合:

xmlns:ig="http://schemas.infragistics.com/xaml"
xmlns:local="clr-namespace:[DATA_MODEL_NAMESPACE]"

Visual Basic の場合:

Imports Infragistics.Controls.Grids

C# の場合:

using Infragistics.Controls.Grids;
  1. 以下のタグをユーザー コントロールのリソース ディレクトリに追加します。

Note

注: 以下のコードは「データ バインディング」トピックに詳述されるカスタム データへのデータ バインディングを使用します。

XAML の場合:

<UserControl.Resources>
   <local:DataUtil x:Key="categoryData" />
</UserControl.Resources>
  1. 列幅設定コントロールと xamGrid コントロールのコンテナーとして使用される StackPanel コントロールを追加します。

XAML の場合:

<StackPanel Name="spMainPanel" Orientation="Vertical" Margin="15" >
     <!--TODO: Combobox コントロールを追加して ColumnWidth 設定を変更します -->
     <!--TODO: xamGrid コントロールを追加します -->
</StackPanel>

Visual Basic の場合:

Dim spMainPanel As StackPanel = New StackPanel With {.Orientation = Orientation.Vertical, _
                                                     .Margin = New Thickness(15)
' TODO: Combobox コントロールを追加して ColumnWidth 設定を変更します
' TODO: xamGrid コントロールを追加します
Me.LayoutRoot.Children.Add(spMainPanel)

C# の場合:

StackPanel spMainPanel = new StackPanel()
{
     Orientation = Orientation.Vertical, Margin = new Thickness(15)
};
// TODO: Combobox コントロールを追加して ColumnWidth 設定を変更します
// TODO: xamGrid コントロールを追加します
this.LayoutRoot.Children.Add(spMainPanel);
  1. 以下の属性を持つ ComboBox コントロールを追加します。この ComboBox は ColumnWidth 設定を変更するために使用されます。

XAML の場合:

<Border Background="Maroon" >
   <ComboBox x:Name="cmbSelection" Margin="5"
             HorizontalAlignment="Stretch"
             SelectionChanged="cmbSelection_SelectionChanged">
   </ComboBox>
</Border>

Visual Basic の場合:

' ColumnWidth を変更するためにコントロールを宣言します
Private cmbSelection As ComboBox
'...
cmbSelection = New ComboBox()
cmbSelection.Margin = New Thickness(5)
AddHandler cmbSelection.SelectionChanged, AddressOf cmbSelection_SelectionChanged
Dim brdSelection As Border = New Border()
brdSelection.Background = New SolidColorBrush(Colors.Red)
brdSelection.Child = cmbSelection
spMainPanel.Children.Add(brdSelection)

C# の場合:

// ColumnWidth タイプを変更するためにコントロールを宣言します
private ComboBox cmbSelection;
// ...
cmbSelection = new ComboBox();
cmbSelection.Margin = new Thickness(5);
cmbSelection.SelectionChanged += cmbSelection_SelectionChanged;
Border brdSelection = new Border();
brdSelection.Background = new SolidColorBrush(Colors.Red);
brdSelection.Child = cmbSelection;
// brd Border を spMainPanel StackPanel に追加します
spMainPanel.Children.Add(brdSelection);
  1. xamGrid コントロールを追加します。

XAML の場合:

<ig:XamGrid x:Name="xamGrid"
  ItemsSource="{Binding Source={StaticResource categoryData}, Path=CategoriesAndProducts}"  Loaded="XamGrid_OnLoaded" >
  </ig:XamGrid>

Visual Basic の場合:

' xamGrid コントロールを宣言します
Private xamGrid As XamGrid
'...
' init xamGrid コントロール
xamGrid = New XamGrid()
' 注: このコントロールは xamGrid コントロールの ItemsSource へのカスタム データ バインディングを使用しています
' 詳細はデータ バインディングのセクションを参照してください
xamGrid.ItemsSource = DataUtil.CategoriesAndProducts
' xamGrid xamGrid を spMainPanel StackPanel に追加します
spMainPanel.Children.Add(xamGrid)
AddHandler xamGrid.Loaded, AddressOf xamGrid_Loaded

C# の場合:

// xamGrid コントロールを宣言します
private XamGrid xamGrid;
// ...
// init xamGrid コントロール
xamGrid = new XamGrid();
// 注: このコントロールは xamGrid コントロールの ItemsSource へのカスタム データ バインディングを使用しています
// 詳細はデータ バインディングのセクションを参照してください
xamGrid.ItemsSource = DataUtil.CategoriesAndProducts;
// xamGrid xamGrid を spMainPanel StackPanel に追加します
spMainPanel.Children.Add(xamGrid);
xamGrid.Loaded += xamGrid_Loaded;
  1. 以下のメソッドを追加して、ColumnWidth タイプを ComboBox コントロールにロードします。

Visual Basic の場合:

Private Sub xamGrid_Loaded(sender As Object, e As RoutedEventArgs)
  cmbSelection.ItemsSource = [Enum].GetValues(GetType(ColumnWidthType))
  cmbSelection.SelectedIndex = 1
  End Sub

C# の場合:

private void xamGrid_Loaded(object sender, RoutedEventArgs e)
  {
  cmbSelection.ItemsSource = Enum.GetValues(typeof(ColumnWidthType));
  cmbSelection.SelectedIndex = 1;
  }
  1. ComboBox コントロールの SelectionChanged イベントのイベント ハンドラーを実装します。

Visual Basic の場合:

Private _ColumnWidthType As ColumnWidthType = ColumnWidthType.InitialAuto
'...
Private Sub cmbSelection_SelectionChanged(ByVal sender As System.Object, ByVal e As SelectionChangedEventArgs)
     If Not cmbSelection Is Nothing Then
            _ColumnWidthType = DirectCast(cmbSelection.SelectedIndex, ColumnWidthType)
     If _ColumnWidthType = ColumnWidthType.Numeric Then
                xamGrid.ColumnWidth = New ColumnWidth(80, False)
     ElseIf _ColumnWidthType = ColumnWidthType.Auto Then
                xamGrid.ColumnWidth = ColumnWidth.Auto
     ElseIf _ColumnWidthType = ColumnWidthType.InitialAuto Then
                xamGrid.ColumnWidth = ColumnWidth.InitialAuto
     ElseIf _ColumnWidthType = ColumnWidthType.SizeToCells Then
                xamGrid.ColumnWidth = ColumnWidth.SizeToCells
     ElseIf _ColumnWidthType = ColumnWidthType.SizeToHeader Then
                xamGrid.ColumnWidth = ColumnWidth.SizeToHeader
     ElseIf _ColumnWidthType = ColumnWidthType.Star Then
                xamGrid.ColumnWidth = ColumnWidth.Star
     End If
  End If
End Sub

C# の場合:

private ColumnWidthType _ColumnWidthType = ColumnWidthType.InitialAuto;
//...
private void cmbSelection_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
   if (cmbSelection != null)
   {
          _ColumnWidthType = (ColumnWidthType)cmbSelection.SelectedIndex;
          if (_ColumnWidthType == ColumnWidthType.Numeric)
               xamGrid.ColumnWidth = new ColumnWidth(80, false);
           else if (_ColumnWidthType == ColumnWidthType.Auto)
               xamGrid.ColumnWidth = ColumnWidth.Auto;
           else if (_ColumnWidthType == ColumnWidthType.InitialAuto)
               xamGrid.ColumnWidth = ColumnWidth.InitialAuto;
           else if (_ColumnWidthType == ColumnWidthType.SizeToCells)
               xamGrid.ColumnWidth = ColumnWidth.SizeToCells;
           else if (_ColumnWidthType == ColumnWidthType.SizeToHeader)
               xamGrid.ColumnWidth = ColumnWidth.SizeToHeader;
           else if (_ColumnWidthType == ColumnWidthType.Star)
               xamGrid.ColumnWidth = ColumnWidth.Star;
     }
}
  1. アプリケーションを実行します。ユーザー コントロールは、カスタム データがロードされた xamGrid と、xamGrid コントロールで列幅設定を変更するために使用できる ComboBox コントロールを表示します。以下の画像はユーザー コントロールがどのように表示されるのかを示します。

xamGrid Change Column Width Settings 02.png