简体   繁体   English

WPF DataGridRow ContextMenu MenuItem单击事件未触发

[英]WPF DataGridRow ContextMenu MenuItem Click Event Not Firing

I have a DataGrid with a context menu that is only accessible from the rows. 我有一个带有上下文菜单的DataGrid,该菜单只能从行访问。 I got the solution from this StackOverflow Answer . 我从这个StackOverflow Answer获得解决方案。 I needed to tie the context menu to the rows because the click methods require a specific row to be selected. 我需要将上下文菜单绑定到行,因为click方法需要选择特定的行。 The context menu on the rows looks and works great. 行上的上下文菜单看起来很好用。 The problem is now the click events for the menu items aren't firing. 现在的问题是菜单项的单击事件没有触发。 Does anybody know how to fix this? 有人知道如何解决此问题吗?

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

I added a MessageBox and WriteLine commands to the click event method to be sure but they do not show up. 我将MessageBox和WriteLine命令添加到click事件方法中,以确保它们不会显示。

C#: C#:

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

Add the ContextMenu as a Resource and reference it as a StaticResource . ContextMenu添加为Resource并将其作为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>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM