MenuItem.Click RoutedEvent not firing in WPF
menuitem, routed-events, wpf
Solution
The `ContextMenu` is opened in a `Popup` control, which is not part of the visual tree of its logical parent.
In order to have a common `Click` handler for all `MenuItems`, move the handler to the `ContextMenu` element:
<DataGrid Name="dataGridMembers" Grid.Row="1" Grid.ColumnSpan="15"
AutoGenerateColumns="False" SelectionMode="Single"
ItemsSource="{Binding MemberList}" RowHeaderWidth="5"
MouseDoubleClick="dataGridMembers_MouseDoubleClick"
>
<DataGrid.ContextMenu>
<ContextMenu Name="GridMenu"
MenuItem.Click="NewReservationContextMenuClick">
...
</ContextMenu>
Problem
I have a `ContextMenu` on a `DataGrid` and I'm trying to capture the `MenuItem.Click` event for all the menu items. Like so: ``` <DataGrid Name="dataGridMembers" Grid.Row="1" Grid.ColumnSpan="15" AutoGenerateColumns="False" SelectionMode="Single" ItemsSource="{Binding MemberList}" RowHeaderWidth="5" MouseDoubleClick="dataGridMembers_MouseDoubleClick" MenuItem.Click="NewReservationContextMenuClick"> <DataGrid.ContextMenu> <ContextMenu Name="GridMenu"> <MenuItem Name="AddSponsoredSingle" Header="Add Sponsored Single" /> <Separator /> <MenuItem Name="EditNote" Header="Add/Edit Note" /> <Separator /> <MenuItem Name="AddMale" Header="Add Male" /> <MenuItem Name="AddFemale" Header="Add Female"/> <MenuItem Name="AddCouple" Header="Add Couple"/> </ContextMenu> </DataGrid.ContextMenu> <DataGrid.Columns> ... </DataGrid.Columns> </DataGrid> ``` The problem is the event never fires. `MenuItem.Click` is supposed to be a bubbled event and I should be able to catch it anywhere in the visual tree. What am I doing wrong? EDIT: adding the handler in code works fine. The following line in the constructor of the `.xaml.cs` and all is good. ``` GridMenu.AddHandler(MenuItem.ClickEvent, new RoutedEventHandler(NewReservationContextMenuClick)); ```