Похоже, проблема в том, что элемент управления Popup обрабатывает событие щелчка мыши и, следовательно, он не достигает вашего пункта меню, попробуйте открыть его вручную, обработав событие PreviewLeftButton
:
<StackPanel x:Name="Panel">
<Popup PlacementTarget="{Binding ElementName=Panel}"
IsOpen="True">
<StackPanel Background="White">
<!--<Menu>-->
<MenuItem Header="Open file..." />
<MenuItem Header="Settings" />
<!-- Nested items -->
<MenuItem Header="Test" Click="MenuItem_OnClick" PreviewMouseLeftButtonDown="UIElement_OnPreviewMouseLeftButtonDown">
<MenuItem Header="Nested Item" />
<MenuItem Header="Nested Item" />
<MenuItem Header="Nested Item" />
<MenuItem Header="Nested Item" />
<MenuItem Header="Nested Item" />
</MenuItem>
<MenuItem Header="Exit" />
<!--</Menu>-->
</StackPanel>
</Popup>
</StackPanel>
И:
private void UIElement_OnPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
((MenuItem)sender).IsSubmenuOpen = true;
}
РЕДАКТИРОВАТЬ
Моя ошибка, проблема не связана с тем, что событие Click не обрабатывается.Я просто положил кнопку в стеке панели, и это сработало.Проблема состоит в том, что, когда у MenuItem есть подэлементы, событие click не вызывается, и необходимо вручную обработать состояние подменю, если корневой элемент меню не является «дочерним» для элемента управления Menu
или ContextMenu
.Эти элементы управления уже обрабатывают это, но, поскольку вы реализуете свое собственное «ContextMenu», вы должны реализовать это поведение самостоятельно