2011-10-04 6 views

risposta

23

bersaglio di uno stile comune a tutti DataGridColumnHeaders:

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

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

Se vuoi diversi menu contestuali per diverse intestazioni di colonna quindi utilizza i trigger:

 <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> 

speranza t cappello aiuta.

+0

Che dire se si generano le colonne in modo dinamico? – MoonKnight

+0

In caso di colonne dinamiche, la seconda soluzione rimarrà valida presumendo che si conoscano i nomi delle colonne prima della mano. –

0

Dipende da come si sta generando le colonne, se li stanno definendo in XAML allora si potrebbe fare questo:

<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> 
Problemi correlati