非常に簡単でわかりやすい例です。WindowのCommandBindingはContextMenuからのコマンドの実行をキャッチしません
私には窓があります。これは、CommandBindingsがRoutedUICommandの実行をキャッチするように設定されています。
<Window
...
>
<Window.CommandBinding>
<CommandBinding
Command="{x:Static local:Commands.Command1}"
Executed="OnCommand1Executed"
CanExecute="OnCanCommand1Execute"
/>
</Window.CommandBinding>
</Window>
ウィンドウ内にはUserControlがあり、その内部にはContextMenuが宣言されています。 ContextMenu項目には、同じRoutedUICommandに割り当てられたCommandプロパティがあります。
<ContextMenu>
<MenuItem Command="{x:Static local:Commands.Command1}" />
</ContextMenu>
ただし、メニュー項目は非アクティブ(==無効)のままです。何とかコマンドの実行がウィンドウに表示されません。 ContextMenuがポップアップの中にあるのでかもしれません。
必要なCommandBindingをContextMenu.CommandBindingsコレクションに追加すると、すべて正常に動作します。しかし、それは単一の「グローバルな」CommandBindingのための場所を持たないことは恐ろしい選択です。
どのようにして問題を最善の方法で解決できますか?
UPD:それほど悪くはないことが分かります。コマンドは初めてユーザーがメニューを開くときにのみにバインドされていません。それが閉鎖され、再開された場合、すべてが問題ありません。それでも、それは望ましくないことであり、非常に奇妙な行動です。
に関係だと思われるが、私はこれを考えますその回避策を最初に見た場所だったhttp://cebla5.spaces.live.com/blog/cns!1B8262ED00250003!206.entry?wa=wsignin1.0&sa=834175698 –
これはとても奇妙ですが、動作します、ありがとうございます: ) – arconaut
代替回避策については、http://stackoverflow.com/a/6070771を参照してください。 IMHOより良いアプローチ - XAMLのみで、フォーカスの副作用には依存しませんが、XAMLの "オブジェクトのインスタンスにオブジェクト参照が設定されていません"という偽のエラーメッセージが表示されるという欠点がありますエディタ(ちょうどエディタで...コードはまだコンパイルされ、うまく動作します)。私がそのエラーを修正する方法を見つけ出すことができれば、代替案が100%好ましいと言えます。 –