2010-12-19 12 views
0

私のWPFアプリケーションでは、コード内の別の場所から起動できるアクションがいくつかあるので、かなり頻繁にルーティングコマンドを使用します。WPFコマンドが起動しない(おそらくコマンドルーティングに関する問題)

これは問題です。このメカニズムは、メインプログラムウィンドウにフォーカスがある限り完全に機能しますが、ダイアログウィンドウが表示されている場合、コマンドは機能しなくなります。したがって、メインウィンドウの上にダイアログボックスやウィンドウがある場合、コマンドは基本的にbeeingを停止します。

もう少しテストすると、コマンド自体が実行されていることがわかりましたが、実際には正しくルーティングされていません。コマンドのバインディングを含むオブジェクトをコマンドの「ターゲット」パラメータとして渡した場合です。彼らが働いているExecute()メソッド...問題は私がいつも手元にターゲットを持っているわけではありません(ルーティングされたコマンドを使用するのはなぜですか?)

多分それは何かです本当に愚かな私は取得していない...私はまだWPFで学んでいます。

ありがとうございます!

答えて

1

問題は、コマンドメカニズムがコマンドをビジュアルツリーの上にルーティングすることです。つまり、コマンドのバインディングを含む要素が見つかるまで、コマンドターゲットからツリーを移動します。したがって、ダイアログウィンドウからコマンドを実行しようとすると、一番上の要素はダイアログウィンドウになり、ビジュアルツリーの前のウィンドウとは直接接続しません。

ターゲットを自分で提供するか、適切に処理するためにダイアログウィンドウでバインディングを作成する必要があります。

前のウィンドウからそのダイアログウィンドウを開くと、所有者プロパティを指定すると、をコマンドターゲットとして使用できます。

私は役立つことを願っています。

+0

ご協力いただきありがとうございます。私はそれが視覚的な木の問題であると思っていました。私は最後にそれを別の方法で解決しましたが、とにかく情報に感謝します。 –