2

ShowDialogで開いたウィンドウがビジュアルツリーでどのように扱われるのか疑問に思いました。

たとえば、ウィンドウAはShowDialogを介してウィンドウBを開きます。ウィンドウBでルーティングされたコマンドを実行すると、ウィンドウAはコマンドを受信しません(コマンドをリッスンしている場合でも)。

これを機能させる方法はありますか?

ありがとう!ジョン

4

1 に答える 1

5

私たちのアプリケーションでは、常にこの状況に遭遇します。これには Window.Owner プロパティと ICommandSource.CommandTarget プロパティを使用します。

たとえば、ウィンドウ A では次のようになります。

DialogWindow windowB = new DialogWindow();
windowB.Owner = this;
windowB.ShowDialog();

次に、DialogWindow で、コマンドを実行するすべてのコントロールの CommandTarget が親 Window の Owner にバインドされます。

<Window x:Class="DialogWindow" x:Name="wnd">
    <Button Command="SomeCommand" CommandTarget="{Binding Owner, ElementName=wnd}"/>
</Window>

あるいは、ウィンドウ B 内のコードから実行している場合:

SomeCommand.Execute(params, this.Owner);

CommandTarget は、ウィンドウ A に CanExecute と Execute をリッスンさせます。

于 2008-12-11T19:57:28.880 に答える