Довольно простой и понятный пример.
У меня есть окно. В нем установлены CommandBindings для перехвата выполнения RoutedUICommand.
<Window
...
>
<Window.CommandBinding>
<CommandBinding
Command="{x:Static local:Commands.Command1}"
Executed="OnCommand1Executed"
CanExecute="OnCanCommand1Execute"
/>
</Window.CommandBinding>
</Window>
В окне размещен UserControl, внутри которого объявлено ContextMenu. Элемент ContextMenu имеет свойство Command, назначенное той же самой RoutedUICommand.
<ContextMenu>
<MenuItem Command="{x:Static local:Commands.Command1}" />
</ContextMenu>
Но пункт меню остается неактивным (== отключен). Каким-то образом выполнение команды не доходит до окна. Может быть, это потому, что ContextMenu находится внутри всплывающего окна?
Все работает правильно, если я добавляю необходимую CommandBinding в коллекцию ContextMenu.CommandBindings. Но это ужасный вариант - не иметь места для единственной «глобальной» CommandBinding.
Как решить проблему наилучшим образом?
UPD: Оказывается, все не так плохо. Команды не связаны только в первый раз пользователь открывает меню. Если он закрыт и снова открыт, все в порядке. Тем не менее, это кажется нежелательным и довольно странным поведением.