2011-10-04 15 views
12

मैं डेटाग्रिड के कॉलम हेडर के लिए संदर्भ मेनू को शेष कोशिकाओं से अलग होना चाहता हूं। तो नियमित ContextMenu संपत्ति का उपयोग करने के लिए काम नहीं जा रहा है। DataGrid.RowHeaderTemplate है, लेकिन मुझे DataGrid.ColumnHeaderTemplate नहीं मिल रहा है।एक WPF 4 DataGrid के लिए कॉलम हैडर पर राइट क्लिक संदर्भ मेनू कैसे जोड़ें?

संपादित/नोट: कॉलम गतिशील रूप से उत्पन्न होते हैं।

उत्तर

23

लक्ष्य:

<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

गतिशील कॉलम के मामले में, दूसरा समाधान अभी भी यह मान लेगा कि आप हाथ से पहले कॉलम नामों को जान लेंगे। –

0

यह कैसे आप अपने कॉलम पैदा कर रहे हैं पर निर्भर करता है, अगर आप उन्हें XAML में परिभाषित कर रहे हैं तो आप ऐसा कर सकते हैं: सभी DataGridColumnHeaders के लिए एक आम शैली

<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> 
संबंधित मुद्दे