2011-10-04 10 views
12

DataGridの列ヘッダーのコンテキストメニューが残りのセルと異なるようにします。したがって、通常のContextMenuプロパティを使用することはできません。 DataGrid.RowHeaderTemplateがありますが、DataGrid.ColumnHeaderTemplateが見つかりません。右クリックコンテキストメニューをWPF 4 DataGridの列見出しに追加するにはどうすればよいですか?

編集/注:列は動的に生成されます。

答えて

23

ターゲットすべてDataGridColumnHeadersに共通のスタイル:

<DataGrid.Resources> 
     <ContextMenu x:Key="DataGridColumnHeaderContextMenu" ...> 
     </ContextMenu> 

     <Style TargetType="{x:Type DataGridColumnHeader}"> 
      <Setter Property="ContextMenu" 
        Value="{StaticResource DataGridColumnHeaderContextMenu}" /> 
     </Style> 
    </DataGrid.Resources> 

場合さまざまな列ヘッダーに対して異なるコンテキストメニューが必要な場合は、トリガーを使用します。

 <DataGrid.Resources> 
     <ContextMenu x:Key="ColumnHeaderContextMenu1" ...> 
     </ContextMenu> 

     <ContextMenu x:Key="ColumnHeaderContextMenu2" ...> 
     </ContextMenu> 

     <Style TargetType="{x:Type DataGridColumnHeader}"> 
      <Style.Triggers> 
       <Trigger Property="Content" Value="Column1"> 
        <Setter Property="ContextMenu" 
          Value="{StaticResource ColumnHeaderContextMenu1}" /> 
       </Trigger> 
       <Trigger Property="Content" Value="Column2"> 
        <Setter Property="ContextMenu" 
          Value="{StaticResource ColumnHeaderContextMenu2}" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.Resources> 

希望帽子が助けます。

+0

列を動的に生成する場合はどうなりますか? – MoonKnight

+0

動的列の場合は、前の列名を知っていることを前提として、2番目の解決方法が有効です。 –

0

XAMLでそれらを定義している場合、それは、あなたがこれを行うことができ、あなたが列を生成しているかによって異なります。

<DataGrid DataContext="{Binding MyDataContext}" ItemsSource="{Binding MyItems}" AutoGenerateColumns="False">   
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding Path=Age}" Header="Age" > 
      <DataGridTextColumn.HeaderTemplate> 
       <DataTemplate> 
        <TextBlock Text="{TemplateBinding Content}" > 
         <TextBlock.ContextMenu> 
          <ContextMenu> 
           <MenuItem Header="Task _1" /> 
           <MenuItem Header="Task _2" /> 
           <MenuItem Header="Task _3" /> 
          </ContextMenu> 
         </TextBlock.ContextMenu> 
        </TextBlock> 
       </DataTemplate> 
      </DataGridTextColumn.HeaderTemplate> 
     </DataGridTextColumn> 
    </DataGrid.Columns> 
</DataGrid> 
関連する問題