2017-08-06 10 views
0

私は行からのみアクセス可能なコンテキストメニューを持つDataGridを持っています。私はthis StackOverflow Answerから解決策を得ました。クリック方法では、特定の行を選択する必要があるため、コンテキストメニューを行に結びつける必要がありました。行のコンテキストメニューは見た目がよく、うまく動作します。今問題は、メニュー項目のクリックイベントが発生していないことです。誰もがこれを修正する方法を知っていますか?WPF DataGridRow ContextMenu MenuItemイベントが発生しないをクリック

XAML:

<DataGrid x:Name="NetworkEntryGrid" Margin="10,10,10,0" CanUserResizeColumns="True" CanUserReorderColumns="False" ColumnWidth="*" IsReadOnly="True" IsManipulationEnabled="False"> 
    <DataGrid.Resources> 
     <Style TargetType="DataGridRow"> 
      <Setter Property="ContextMenu"> 
       <Setter.Value> 
        <ContextMenu> 
         <MenuItem Header="Install As"> 
          <MenuItem x:Name="InstallLabelsMenuItem" Header="Labels" Click="InstallLabelsMenuItem_Click"/> 
          <MenuItem x:Name="InstallATagsMenuItem" Header="A Tags" Click="InstallATagsMenuItem_Click"/> 
          <MenuItem x:Name="InstallSpecialLabelsMenuItem" Header="Special Labels" Click="InstallSpecialLabelsMenuItem_Click"/> 
          <MenuItem x:Name="InstallReportsMenuItem" Header="Reports" Click="InstallReportsMenuItem_Click"/> 
          <MenuItem x:Name="InstallPawnTicketsMenuItem" Header="Pawn Tickets" Click="InstallPawnTicketsMenuItem_Click"/> 
          <MenuItem x:Name="InstallReceiptsMenuItem" Header="Receipts" Click="InstallReceiptsMenuItem_Click"/> 
         </MenuItem> 
         <MenuItem Header="Copy"> 
          <MenuItem x:Name="CopyNameMenuItem" Header="Name" Click="CopyNameMenuItem_Click"/> 
          <MenuItem x:Name="CopyIpMenuItem" Header="IP" Click="CopyIpMenuItem_Click"/> 
          <MenuItem x:Name="CopyMacMenuItem" Header="MAC Address" Click="CopyMacMenuItem_Click"/> 
          <MenuItem x:Name="CopyVendorMenuItem" Header="Vendor" Click="CopyVendorMenuItem_Click"/> 
         </MenuItem> 
        </ContextMenu> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </DataGrid.Resources> 
</DataGrid> 

私はメッセージボックスを追加し、WriteLineメソッドは確かにクリックイベントメソッドにコマンドが、それらは表示されません。

のC#:

private void InstallLabelsMenuItem_Click(object sender, RoutedEventArgs e) 
{ 
    Console.WriteLine("Labels Clicked"); 
    MessageBox.Show("Labels Clicked", "Menu Item Event", MessageBoxButton.OK); 
    AssignPrinter("Labels"); 
} 
+0

回答があれば –

答えて

1

ResourceとしてContextMenuを追加し、StaticResourceとしてそれを参照します。

<DataGrid x:Name="NetworkEntryGrid" Margin="10,10,10,0" CanUserResizeColumns="True" CanUserReorderColumns="False" ColumnWidth="*" IsReadOnly="True" IsManipulationEnabled="False"> 
    <DataGrid.Resources> 
     <ContextMenu x:Key="contextMenu"> 
      <MenuItem Header="Install As"> 
       <MenuItem x:Name="InstallLabelsMenuItem" Header="Labels" Click="InstallLabelsMenuItem_Click"/> 
       <MenuItem x:Name="InstallATagsMenuItem" Header="A Tags" Click="InstallATagsMenuItem_Click"/> 
       <MenuItem x:Name="InstallSpecialLabelsMenuItem" Header="Special Labels" Click="InstallSpecialLabelsMenuItem_Click"/> 
       <MenuItem x:Name="InstallReportsMenuItem" Header="Reports" Click="InstallReportsMenuItem_Click"/> 
       <MenuItem x:Name="InstallPawnTicketsMenuItem" Header="Pawn Tickets" Click="InstallPawnTicketsMenuItem_Click"/> 
       <MenuItem x:Name="InstallReceiptsMenuItem" Header="Receipts" Click="InstallReceiptsMenuItem_Click"/> 
      </MenuItem> 
      <MenuItem Header="Copy"> 
       <MenuItem x:Name="CopyNameMenuItem" Header="Name" Click="CopyNameMenuItem_Click"/> 
       <MenuItem x:Name="CopyIpMenuItem" Header="IP" Click="CopyIpMenuItem_Click"/> 
       <MenuItem x:Name="CopyMacMenuItem" Header="MAC Address" Click="CopyMacMenuItem_Click"/> 
       <MenuItem x:Name="CopyVendorMenuItem" Header="Vendor" Click="CopyVendorMenuItem_Click"/> 
      </MenuItem> 
     </ContextMenu> 
     <Style TargetType="DataGridRow"> 
      <Setter Property="ContextMenu" Value="{StaticResource contextMenu}"/> 
     </Style> 
    </DataGrid.Resources> 
</DataGrid> 
+0

これは完全に問題を解決しました。どうもありがとうございます! – Iridium237

関連する問題