Un exemple assez simple et direct.CommandBinding in Window n'intercepte pas l'exécution de la commande depuis ContextMenu
J'ai une fenêtre. Il a CommandBindings défini pour attraper une exécution RoutedUICommand.
<Window
...
>
<Window.CommandBinding>
<CommandBinding
Command="{x:Static local:Commands.Command1}"
Executed="OnCommand1Executed"
CanExecute="OnCanCommand1Execute"
/>
</Window.CommandBinding>
</Window>
Un UserControl est hébergé dans la fenêtre, à l'intérieur de laquelle un ContextMenu est déclaré. Un élément ContextMenu a la propriété Command assignée à la même RoutedUICommand.
<ContextMenu>
<MenuItem Command="{x:Static local:Commands.Command1}" />
</ContextMenu>
Mais l'élément de menu reste inactif (== désactivé). D'une manière ou d'une autre, l'exécution des commandes ne va pas jusqu'à la fenêtre. Peut-être que c'est parce que ContextMenu est à l'intérieur d'un popup?
Tout fonctionne correctement si j'ajoute CommandBinding nécessaire dans la collection ContextMenu.CommandBindings. Mais c'est une option terrible de ne pas avoir de place pour un CommandBinding "global".
Comment puis-je résoudre le problème de la meilleure façon? UPD: Il s'avère que ce n'est pas si grave que ça. Les commandes ne sont pas liées uniquement à la première ouverture utilisateur ouvre le menu. Si c'est fermé et rouvert tout va bien. Pourtant, il semble ne pas être souhaitable et un comportement assez étrange.
Pour donner du crédit lorsque le crédit est dû, je pense que était l'endroit où j'ai d'abord vu cette solution de contournement http://cebla5.spaces.live.com/blog/cns!1B8262ED00250003!206.entry?wa=wsignin1.0&sa=834175698 –
c'est tellement bizarre mais ça marche, merci: – arconaut
Voir http://stackoverflow.com/a/6070771 pour une solution de rechange. À mon humble avis, c'est une meilleure approche - XAML seulement et ne dépend pas de l'effet secondaire de focus - mais il a l'inconvénient de provoquer un faux message d'erreur "Référence d'objet non définie à une instance d'un objet" dans le XAML éditeur (juste dans l'éditeur ... le code compile encore et fonctionne bien). Si je pouvais trouver un moyen de corriger cette erreur, je dirais que l'alternative était 100% préférable. –