0 votes

WPF : L'élément de ContextMenu lié à une commande n'est activé qu'après avoir invoqué la commande depuis une autre source. Comment cela se fait-il ?

J'ai un ContextMenu dont les éléments sont tous liés à des commandes et s'activent/désactivent correctement après qu'UNE commande soit invoquée à partir d'une autre source, mais avant, ils sont tous désactivés. Ainsi, si je lance l'application, tous les éléments du menu sont désactivés, mais si j'invoque l'une des commandes liées à partir d'une autre source (boutons, par exemple), ils sont synchronisés avec le code CanExecute. Je n'ai aucune idée de la façon de déboguer ce problème. Toute réflexion serait utile !

4voto

midspace Points 595

Il semble qu'il y ait un bogue lorsqu'il n'y a pas d'élément ciblé dans la portée principale de la fenêtre. Une solution de contournement consiste à lier la CommandTarget de MenuItem à la fenêtre principale.

Réponse de Marco Zhou ici : http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/7bd75a7c-eab4-4f3a-967b-94a9534a7455

<Window.ContextMenu>
    <ContextMenu >
      <ContextMenu.Items>
        <MenuItem Command="ApplicationCommands.Open" 
                  CommandTarget="{Binding Path=PlacementTarget,RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}}}"/> 
      </ContextMenu.Items>
    </ContextMenu>
  </Window.ContextMenu>

1voto

Adel Hazzah Points 2860

Il est parfois nécessaire de forcer WPF à réévaluer si les commandes sont activées ou non.

Quelque part dans votre code, ajoutez un appel à :

CommandManager.InvalidateRequerySuggested();

Voyez si ça aide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X